【问题标题】:Avoiding double encoding in <INPUT> while using htmlspecialchars在使用 htmlspecialchars 时避免在 <INPUT> 中进行双重编码
【发布时间】:2011-12-03 17:18:16
【问题描述】:

假设您有一个文本 &lt;INPUT&gt; 作为用户名,他们决定输入

Johnny's Pizza

这在数据库中保存为

Johnny's Pizza

但如果用户决定编辑,我会重新填充文本&lt;INPUT&gt;,如下所示

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。

【问题讨论】:

    标签: php html codeigniter xss htmlspecialchars


    【解决方案1】:

    使用htmlspecialchars是正确的做法,直接输出到页面不会给出你描述的结果。

    大概form_input 函数期望接收文本而不是HTML,因此它自己运行htmlspecialchars。如果是这样,解决方案是只传递文本而不是先对 HTML 的值进行编码。

    【讨论】:

    • 我在这里使用 codeigniter 作为框架 - 所以如果你是正确的,你是说我可以从表单输入中删除 htmlspecialchars
    • 显然,codeigniter 的表单助手已经处理了 htmlspecialchars 在你的值上运行 --- codeigniter.com/forums/viewthread/158843/P15 --- 所以我在这里做的方式,意味着我做了两次
    • 如果我们找到that function,并一直跟踪直到我们点击this function,我们可以看到htmlspecialchars已经被使用了,您不需要再次使用它。
    • 正确 --- 我必须说的 codeigniter 的小功能 --- thx
    • 我认为这是任何生成表单标记的库的基本要求。
    猜你喜欢
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多