HTML-формы, php и апострофы - PullRequest
       2

HTML-формы, php и апострофы

3 голосов
/ 17 февраля 2012

Выполнение универа с HTML, XML и php 5.3 (без SQL). Создание обзорного сайта. У меня есть текстовая область, в которой пользователь может размещать свои комментарии. Если пользователь вводит апостроф, например, лучший в мире Uni !, когда я повторяю $ _REQUEST ['reviewtext'], я получаю лучший в мире Uni!

Чтобы скопировать данные для сохранения в XML, у меня есть следующий код:

$cleantext1 = htmlspecialchars($_REQUEST['reviewtext']);
substr_replace($cleantext1,"\'","'");
$cleantext2 = strip_tags($cleantext1);
$cleantext3 = utf8_encode($cleantext2);

У меня есть эхо на каждом шаге, и цитата остается лучшей в мире! на каждом шагу. Я ожидал, что одна из первых двух строк заменит экранированный апостроф на HTML-код, но, похоже, он не работает.

Интересно, что эта проблема не возникает на моем локальном сервере XAMPP; только на моем веб-сайте.

Есть предложения? Спасибо, Шон

Ответы [ 3 ]

8 голосов
/ 17 февраля 2012

То, что вы испытываете, - это PHP-функция Magic Quotes , которая автоматически экранирует ввод от GET, POST, COOKIE.Не стоит полагаться на эту функцию, и она устарела начиная с PHP 5.3 и имеет тенденцию к отключению по умолчанию в большинстве конфигураций (но не в конфигурации вашего Uni).

Вы можете использовать get_magic_quotes_gpc () , чтобы определить, включено ли это, и если это так, отмените экранирование данных.

if (get_magic_quotes_gpc()) {
    $val = stripslashes($_POST['val']);
} else {
    $val = $_POST['val'];
}

Справочник магических кавычек содержит более подробную информацию об истории, использовании икак обращаться с магическими кавычками.

Кроме того, при выводе данных всегда обязательно избегайте их (например, htmlspecialchars () и при обработке ввода из любого ненадежного источника)., обязательно отфильтруйте его (например, addlashes () , mysql_real_escape_string () ).

2 голосов
/ 17 февраля 2012

Попробуйте отключить магические кавычки (PITA IMO!). (как написано выше, пока я печатал свой ответ, метод Дрю был бы наиболее гибким для переносимости. Кстати, не нужно объявлять новые переменные, если вы не собираетесь обрабатывать переменные разными способами. поэтому после того, как вы очистите текст с помощью htmlspecialchars, я добавлю его в $ cleanreview. Также вы не указываете кодировку символов, которая может вернуться, чтобы укусить вас. Я использую UTF-8, так как она кажется самой прогрессивной кодировкой, которая уже широко поддерживается.

http://www.php.net/manual/en/function.htmlspecialchars.php

Кстати, я сторонник правильной пунктуации, поэтому в своем коде я заменяю html-сущности на выходе:

$syn = str_replace("'", "’", $syn);
$syn = str_replace("“", "“", $syn);
$syn = str_replace("”", "”", $syn);
$syn = str_replace(" -- ", "—", $syn);

Но, конечно, предполагается, что UTF-8 объявлен в вашем html (первый элемент после тега для скорости).

0 голосов
/ 17 февраля 2012

Этот эффект автоматического экранирования некоторых символов называется «магическими кавычками» и может быть включен / выключен в файле конфигурации php.ini.Очевидно, в конфигурации вашего локального сервера он отключен, а на сервере он включен.

Для получения дополнительной информации просто обратитесь к справочнику PHP для "магических кавычек".

...