PHP удаляет HTML из данных POST - PullRequest
0 голосов
/ 12 июля 2010

Я пытаюсь отправить форму с HTML-данными на своем сервере, но она, похоже, удаляет ее, и я не могу понять, почему.

Если я это сделаю file_get_contents("php://input"), я смогу увидеть свой контент в необработанном виде:

action=submit&content=%3Cp%3EAnteater+Alumni%3A+Help+current+UCI+students+reach+their+goal+of+raising+%2...registration+form%3C%2Fa%3E.%3C%2Fp%3E

Но если я сделаю print_r($_POST['content']);, я увижу текст БЕЗ форматирования html. Это похоже на то, как PHP это как-то убирает.

Я попробовал следующее:

$data = file_get_contents("php://input");
$output = array();
parse_str($data, $output);

Но это просто выводит пустой массив

magic_quotes_gpc выключен. У меня больше ничего в скрипте не изменяет содержимое.

Есть идеи?

ОБНОВЛЕНИЕ : Мне известно, что HTML-код отображается в браузере. Я использую браузер, а также curl и выкидываю содержимое как text/plain - форматирование HTML в браузере не проблема.

Ответы [ 2 ]

3 голосов
/ 12 июля 2010

Помните, что вывод print_r() будет просматриваться в браузере.Если вы не предпримете специальных действий для обработки HTML, браузер увидит HTML и отобразит его как таковой.Если вы не просматриваете исходный код страницы, все, что вы увидите, - это текстовое содержимое.

Чтобы просмотреть загруженный HTML-код напрямую, сначала вам нужно будет выполнить его через htmlentities() / htmlspecialchars(), чтоБуду кодировать любые метасимволы HTML (например, > до >).

Кроме того, если в этом нет особой необходимости, нет причин извлекать данные отправки формы из php://input.Это необработанные данные, и, скорее всего, вы все равно их просто проанализируете, что PHP уже сделал для вас с массивами _GET / _POST.Вдобавок ко всему, если отправка включает в себя загрузку файла, вы будете выгребать весь этот файл в память, который вполне может превысить memory_limit вашего скрипта и уничтожить все прямо здесь.обратите внимание на справочной странице PHP о потоках ввода / вывода, что ввод php: // может быть прочитан только один раз.Если ваш скрипт делает это несколько раз, второе и последующие чтения будут иметь нулевое значение.

1 голос
/ 12 июля 2010

Используете ли вы Framework?Убедитесь, что ничто не выполняет итерацию в массиве заранее, т.е.

foreach ($_POST as $key=>$val)
{
  $_POST[$key] = strip_tags($val);
}

, а также убедитесь, что у вас не включены какие-либо несуществующие правила mod_security (http://www.modsecurity.org/), конечно, это зависит от того, используете ли вы mod_sec!

попробуйте сделать это

<code>echo '<pre>';
print_r($_REQUEST);
echo '
';

и

foreach ($_POST as $key=>$val)
{
  echo $key .' = '. htmlentities($val) . '<br />';

}

просто чтобы дважды проверить, что вы что-то не упустили:)

РЕДАКТИРОВАТЬ: попробуйте это:

foreach ($_REQUEST as $key=>$val)
{
  echo $key .' = '. htmlentities($val) . '<br />';

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...