我正在尝试做一个注册页面,用户将数据输入到输入中,如果这与我的标准不符,我想将他的值再次放入他的输入框中,这样他就不用再写了。
我使用htmlspecialchars来阻止xss。
$string_from_user = htmlspecialchars($_POST['string'], ENT_QUOTES, 'UTF-8');
echo '<input type="text" name="string" value="'.$string_from_user.'">';
问题是......假设我要输入名称:john">
我的输入框现在将显示:john">
,输入的实际值为:john&#34;>
如何显示我的输入框以显示:john">
但真正的值是一个安全的字符串来阻止xss
解决
我的代码上似乎还有另一个我没注意到的FILTER_SANITIZE_STRING。 我删除了,现在一切都很顺利。
/* this caused by problems.
$string = filter_input(INPUT_POST, 'string', FILTER_SANITIZE_STRING);
*/
$string_from_user = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
echo '<input type="text" name="string" value="'.$string_from_user.'">';
答案 0 :(得分:0)
使用 htmlspecialchars_decode
http://php.net/manual/en/function.htmlspecialchars-decode.php请参阅手册以获取使用信息。
答案 1 :(得分:0)
你应该使用
$name=htmlentities($name);
echo $name;
htmlentities将被转换,您可以在页面的页面源中查看它,但对最终用户来说它将显示为干净
答案 2 :(得分:0)
看看这个库我觉得它对你来说更强大
OWASP antiXSS特定库位于:http://code.google.com/p/php-antixss/
答案 3 :(得分:0)
我的代码上似乎还有另一个我没注意到的FILTER_SANITIZE_STRING。 我删除了,现在一切都很顺利。
/* this caused by problems.
$string = filter_input(INPUT_POST, 'string', FILTER_SANITIZE_STRING);
*/
$string_from_user = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
echo '<input type="text" name="string" value="'.$string_from_user.'">';