PHP从POST数据中删除HTML

时间:2010-07-11 21:29:59

标签: php html apache

我正在尝试将包含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 个答案:

答案 0 :(得分:3)

请记住,print_r()的输出将在浏览器中查看。除非您采取特殊步骤来处理HTML,否则浏览器将看到HTML并将其渲染为HTML。除非您查看页面的来源,否则您将看到的只是文本内容。

要直接查看上传的HTML,您必须先通过htmlentities() / htmlspecialchars()运行它,它会对任何HTML元字符进行编码(例如>到{{1} })。

同样,除非您特别需要它,否则没有理由从>检索表单提交数据。这是原始数据,很可能你只是在解析它,PHP已经用_GET / _POST数组为你做了。最重要的是,如果提交包含文件上传,你将把整个文件写入内存,这可能会超出你的脚本的memory_limit并在那里杀死东西。

在I / O流PHP手册页中还有一个note,php://输入只能读取一次。如果您的脚本多次执行,则第二次和后续读取将为空。

答案 1 :(得分:1)

您使用的是框架吗?检查没有事先在数组中迭代,即

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

还检查你是否没有启用任何已解散的mod_security规则(http://www.modsecurity.org/),这当然取决于你是否使用mod_sec!

尝试这样做

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

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

}

只是为了仔细检查你是不是错过了什么:)

编辑:试试这个:

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

}