使用htmlspecialchars时,避免在<input />中进行双重编码

时间:2011-12-03 17:18:16

标签: php html codeigniter xss htmlspecialchars

假设您有一个用户姓名的文字<INPUT>,他们决定输入

Johnny's Pizza

将其保存在DB中

Johnny's Pizza

但如果用户决定进行编辑,我会按以下方式重新填充文本<INPUT>

echo form_input('name', htmlspecialchars($name, ENT_QUOTES, 'UTF-8'));

将显示为

Johnny&#039;s Pizza

在输入字段内。

PHP.net有comment here建议使用

echo form_input('name', htmlspecialchars($name, ENT_QUOTES, 'UTF-8', FALSE));

FALSE引用$double_encoding,但我仍然

Johnny&#039;s Pizza

在输入字段中。

有没有解决这种双重编码的方法?这是可以在使用ENT_QUOTES时修复的内容吗?

使用Codeigniter 2.0.3。

1 个答案:

答案 0 :(得分:2)

使用htmlspecialchars是正确的方法,如果直接将其输出到页面中,则不会给出您描述的结果。

假设form_input函数希望接收文本而不是HTML,因此它本身运行htmlspecialchars。如果是这样,解决方案是只传递文本而不是首先编码HTML的值。