php page1 -->以下位为纯html:
<form action="page2.php" method="post">
<input type="text" name="name" id="name">
-----------submit button, end form --etc.--------------
php page2(是的,我打算将page1的文本输入填充到page2的隐藏输入中):
foreach($_REQUEST as $key=>$value)
{
$value = htmlspecialchars(strip_tags(stripslashes($value))); //attempt to cleanse the data before displaying
}
echo "<p><input type='hidden' id='name' name='name' value='".$_REQUEST['name']."'/>".$_REQUEST['name']."</p>";
问题是第2页上的输出不能生成w3兼容的html,如果用户输入带有引号的输入,如John O'Brien,则html变为:
<p><input type='hidden' id='email' name='email' value='John O'Brien'/>John O'Brien</p>
我还希望能够为任何错误的输入数据生成w3兼容的html,例如:j'o/h'n s ' m,ith
任何帮助都是感激的!
使用ENT_QUOTES
选项到htmlspecialchars()
:
$value = htmlspecialchars(strip_tags(stripslashes($value)), ENT_QUOTES);
就我个人而言,我不会使用$_REQUEST
- Chris Shifflet的《Essential PHP Security》一书建议这可能使您的应用程序容易受到CSRF攻击。
stripslashes(...)
—参见magic_quotes_gc
ini配置。我将使用get_magic_quotes_gpc()
来确定是否有必要。
foreach($_REQUEST as $key=>$value) {
if(get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
$value = htmlspecialchars(strip_tags($value));
}
echo "<p><input type='hidden' id='name' name='name' value='".$_REQUEST['name']."'/>".$_REQUEST['name']."</p>";
foreach($_REQUEST as &$value)
{
$value = addslashes(htmlspecialchars(strip_tags($value)));
}
echo "<p><input type='hidden' id='name' name='name' value='".$_REQUEST['name']."'/>".$_REQUEST['name']."</p>";
- 首先,不是你的代码,也不是上面发布的任何代码都能正常工作。因为一个非常愚蠢的原因。
- 接下来,我有点专注于保留用户输入。为什么要删除一些可能很重要的东西? 第三,我认为隐藏值应该是urlencoded,而不是htmlencoded
$FORM = array();
foreach($_POST as $key =>$value) {
if(get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
$FORM[$key] = htmlspecialchars($value,ENT_QUOTES);
}
echo "<p><input type='hidden' id='name' name='name' value='".$FORM['name']."'/>".
$FORM['name'].
"</p>";