为什么htmlspecialchars()在每个表单提交后不能连续编码字符?看一下下面的例子:
<?php $_POST['txt'] = htmlspecialchars($_POST['txt']); ?>
<form method="post">
<input name="txt" value="<?=$_POST['txt'] ?>" />
<input type="submit" name="save" value="test" />
</form>
您可以在http://verticalcms.com/htmlspecialchars.php运行时看到它。
现在执行以下操作
1) Type & into the text field
2) Hit the test button once
3) When the page completes post back, hit the test button again
4) When the page completes post back, view the page source code
在输入框中,值为&amp;放大器;
我期待&amp;放大器;安培;
为什么不是&amp;放大器;放大器; ???
答案 0 :(得分:2)
这只是HTML实体编码。使用“&amp;”时在HTML属性中,它应该被编码。这就是你正在做的事情。
因此,浏览器会读取
<input value="&" />
并将其翻译为“带有值'&amp;'”的文本框小部件。
其他特殊字符也是如此:
<input value=""" />
会产生“角色。
当您提交表单时,浏览器会以未编码的方式发送这些值,因此您的PHP脚本会像“&amp;”那样收到它,而不是“&amp; amp;”。
答案 1 :(得分:0)
为方便起见,$ _POST中的值已经过html解码。因此,当您的脚本启动时,以下情况属实:
$_POST['txt'] == '&';
htmlspecialchars('&') == '&'
[编辑] 看起来这需要进一步解释
当浏览器使用单个&符号作为'txt'的值将上述表格提交给服务器时,它会将以下内容放入请求正文中:
txt=&
该值已编码,因为浏览器会将多个字段与“&”字符连接起来,如
txt=&&user=soulmerge&pass=whatever
PHP获取传输的值并对它们进行解码以方便程序员使用 - 它使&符号中的符号变为&amp;现在我虽然这首先是问题的原因 - 猜我错了。费迪南德正确回答了实际问题。