Я использую joomla для управления веб-сайтом … и я разрабатываю отдельное приложение php, которое будет вставлять и изменять данные в таблицы, которые используются joomla для хранения html веб-страниц, которые он динамически создает …
Как он работает, я использую компонент joomla для создания контента, а html-код этих статей хранится в поле в таблице, скажем, content_table, joomla .. Этот HTML-код позже извлекается для создания части веб-страницы.
Я хочу сделать то же самое со своим автономным приложением … например, добавить html-код к файлу в content_table, который позже может быть получен joomla для создания части страницы.
Проблема в том, что код html, естественно, имеет много одиночных и двойных кавычек, и это создает проблему при вставке в базу данных. Я пробовал mysql_escape_string () и все еще получаю синтаксические ошибки.
Я могу использовать addslashes (), но поскольку joomla сам извлекает код позже, невозможно использовать stripslashes (), а потом получить его позже.
В любом случае я могу добавить html-код в поле таблицы …
Спасибо за ваши предложения … !!
Изменить: после добавления mysql_escape_string () я получаю
Error adding details. Reason : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fulltext = '\n
Это мой запрос:
UPDATE $jos_content SET introtext = '$intro_code', fulltext = '$article_code' WHERE id = '$article_id'";
Строка ввода следующая:
$article_code = '<hr id="system-readmore" /> <center>{loadposition user50}</center> <p style="text-align: center;"> <span style="color: rgb(0, 255, 255);"> <i> <b> <span style="font-size: x-large;"> <span style="font-family: Arial;"> </span> </span> </b> </i> </span> <span style="color: rgb(0, 255, 255);"> <i> <b> <span style="font-size: x-large;"> <span style="font-family: Arial;"> <?php echo $title; ?> </span> </span> </b> </i> </span> <span style="color: rgb(0, 255, 255);"> <i> <b> <span style="font-size: x-large;"> <span style="font-family: Arial;"> <br /> </span> </span> </b> </i> </span> </p> <p style="text-align: center;"> <img height="269" width="515" border="3" title="<?php echo $title; ?>" alt=" <?php echo $title; ?>" src="<?php echo $article_image;?>" </p> <p> <span style="font-size: small;"> <span style="font-family: Arial;"> <span style="color: rgb(153, 204, 255);"> <p style="margin-top: 2px; margin-bottom: 2px; margin-left: 120px; text-align: left;"> <i> <span style="color: rgb(0, 255, 0);"> <strong> Cast : </strong> <b> </b> </span> </i> <span style="color: rgb(0, 255, 255);"> <b> <?php echo $cast; ?> </b> </span> <i> <span style="color: rgb(0, 255, 255);"> <b> <br /> </b> </span> </i> <span style="font-family: Arial;"> <span style="font-size: small;"> <span style="color: rgb(153, 204, 255);"> </span> </span> <span style="color: rgb(0, 255, 0);"> <i> <strong> Direction </strong> </i> <strong> : </strong> <b> </b> </span> <span style="color: rgb(0, 255, 255);"> <b> <span class="href" id="ctl00_ContentPlaceHolderMainContent_FormView1_Director"> <?php echo $director; ?> </span> </b> </span> </span> <span style="font-family: Arial;"> <br /> <span style="color: rgb(0, 255, 0);"> <i> <strong> Production </strong> </i> <strong> : </strong> <b> </b> </span> <span style="color: rgb(0, 255, 255);"> <b> <?php echo $direction; ?> </b> </span> <span style="color: rgb(255, 102, 0);"> <i> <b> <br /> </b> </i> </span> <span style="font-family: Arial;"> <span style="color: rgb(0, 255, 0);"> <span style="font-family: Arial;"> <span style="font-size: small;"> <i> <strong> Music </strong> </i> <strong> : </strong> </span> </span> </span> </span> <span style="color: rgb(0, 255, 255);"> <b> <i> </i> <?php echo $music; ?> <i> <br /> <span style="color: rgb(0, 255, 0);"> Lyrics </span> </i> <span style="color: rgb(0, 255, 0);"> : </span> <i> </i> </b> </span> <span style="color: rgb(0, 255, 255);"> <b> <?php echo $lyrics; ?> </b> </span> <span style="color: rgb(0, 255, 255);"> <b> <i> <br /> </i> <span style="color: rgb(0, 255, 0);"> <i> Year </i> : </span> <?php echo $year; ?> </b> </span> </span> <i> <span style="color: rgb(0, 255, 255);"> <b> </b> </span> </i> </p> </span> </span> </span> </p> <p> <left> {loadposition user14} </left> </p> <div style="text-align: center;"> <p> <i> <span style="font-family: Arial;"> <b> <span style="font-size: medium;"> <span style="color: rgb(51, 255, 255);"> Click <img src="images/stories/Play button1.png" alt="alt" /> in the Playlist to Download Songs </span> </span> </b> </span> </i> </p> </div> <table border="0" align="center"> <tbody> <tr> <td> <h4 style="text-align: center;"> <i> <span style="color: rgb(102, 255, 0);"> <b> <b> High Bandwidth Users </b> </b> </span> </i> <i> <span style="color: rgb(102, 255, 0);"> <b> <b> </b> </b> </span> </i> <span style="color: rgb(102, 255, 0);"> <b> </b> </span> </h4> </td> <td> <h4 style="text-align: center;"> <i> <span style="color: rgb(102, 255, 0);"> <b> <b> Low Bandwidth Users </b> </b> </span> </i> <span style="color: rgb(102, 255, 0);"> <b> <br /> </b> </span> </h4> </td> </tr> <tr> <td> {auto width="235" displayheight="0" height="225"} <?php echo $hqList; ?> {/auto} </td> <td> {auto width="235" displayheight="0" height="225"}<?php echo $lqList; ?>{/auto} </td> </tr> </tbody> </table> <center> {loadposition user50} </center>';
Я предпочитаю преобразовывать код в обычную строку перед вставкой в базу данных. Я думаю, это самый безопасный сценарий. Рассмотрите возможность использования этого кода:
$article_code = base64_encode($article_code); /* insert to database */
Итак, когда вы хотите использовать этот код обратно, просто декодируйте с помощью base64_decode. Я предлагаю вам использовать тип данных «text» для сохранения $ article_code, а не «varchar».
Вам не нужны косые черты. Единственное, что вызовет проблему при нормальных вставках, – это кавычки, а mysql_escape_string()
должен обрабатывать это, кроме вопросов с кодировкой. Попробуйте mysql_real_escape_string()
.
Также обратите внимание, что сохранение необработанного HTML-кода в базе данных может привести к проблемам безопасности. Подумайте об использовании чего-то вроде bbcode или markdown.
Это лучший способ найти addslashes()
$article_code = addslashes($article_code); UPDATE $jos_content SET introtext = '$intro_code', fulltext = '$article_code' WHERE id = '$article_id'";
Ну..Добавлено это .. Оказывается, проблема была в конце концов не с функцией экранирования …
Проверьте запрос:
UPDATE $jos_content SET introtext = '$intro_code', fulltext = '$article_code' WHERE id = '$article_id'";
Вы можете увидеть поле «полный текст» … По-видимому, слово «полный текст» является ключевым словом mysql … Точнее, это тип поля, например TEXT, INT, MEDIUMTEXT и т. Д.
Я изменил запрос на этот
"UPDATE $jos_content SET $jos_content.introtext = '$intro_code', $jos_content.fulltext = '$article_code' WHERE $jos_content.id = '$article_id'";
И вуаля … !!!!
Просто чтобы подтвердить, ваш запрос выглядит так:
$query = ' UPDATE "'.mysql_real_escape_string ($jos_content).'" SET introtext = "'.mysql_real_escape_string ($intro_code).'", fulltext = "'.mysql_real_escape_string ($article_code).'" WHERE id = "'.mysql_real_escape_string ($article_id).'" ";
fulltext
является ключевым словом mysql predefine. Пожалуйста, используйте Острый (`) или одинарный кавычек (')
Вот код –
UPDATE $jos_content SET `introtext` = '$intro_code', `fulltext` = '$article_code' WHERE `id` = '$article_id'";
У меня была та же проблема, я исправил ее с помощью регулярных выражений. Вы можете использовать что-то вроде этого: $target = '{~p class={{q}}important-text{{q}}~}Some text here {~/p~}';
а затем используйте preg_replace()
:
class handle { public static function makehtml($target) { $output = preg_replace("#{~#", "<", $target); $output = preg_replace("#~}#", ">", $target); $output = preg_replace("#{{q}}#", '"', $target); return $output; } } echo handle::makehtml($target); // output : <p class="important-text">Some text here</p>
если вы беспокоитесь о пространстве и используете метод кодирования base 64, размещенный здесь, вы можете использовать команду gzdeflate в php, чтобы сократить ее, а затем закодировать. Вот небольшой тестовый скрипт на некоторых сгенерированных образцах. Очевидно, что существуют различные методы сжатия, если вы заинтересованы в размере, но это означало бы, что вы могли бы поместить его в mysql, минимизируя размер на db. Затем вы можете прочитать его с помощью gzinflate (base64_decode (…));
<?php //generate sample chars for the example function generateRandomString($length = 10000) { $characters = '01234"56/789abcdefghij:klmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; } // $string =generateRandomString(); echo 'string size:'.strlen($string); $b64html = base64_encode($string); echo '<br/>'.'Original base64 size:'.strlen($b64html); $compressed = gzdeflate($string, 9); echo '<br/>'.'compressed size:'.strlen($compressed); echo '<br/>'.'base64 compressed size:'.strlen(base64_encode($compressed)); /* insert into db the base64_encode($compressed); */ ?>
Вызов функции mysql_escape_string (), проходящей в переменной, которая содержит текст html, например:
mysql_escape_string ($ _ POST [ "текст"]);
будет гарантировать, что специальные символы, такие как кавычки в тексте, не приведут к ошибке php, и база данных будет успешно обновлена.