避免 中的双重编码使用 htmlspecialchars 时
假设您有一个用户名文本 ,他们决定输入
Johnny's Pizza
This is saves in DB as
Johnny's Pizza
但如果用户决定编辑,我会重新填充文本 ;
如下
echo form_input('name', htmlspecialchars($name, ENT_QUOTES, 'UTF-8'));
,将显示为
Johnny's Pizza
输入字段内。
PHP.net 有一个这里的评论建议使用
echo form_input('name', htmlspecialchars($name, ENT_QUOTES, 'UTF-8', FALSE));
它, FALSE
指的是 $double_encoding
,但我仍然进入
Johnny's Pizza
输入字段。
有没有办法解决这种双重编码?这是可以在仍然使用 ENT_QUOTES
的情况下修复的问题吗?
使用 Codeigniter 2.0.3。
Say you have a text <INPUT>
for a user's name and they decide to type in
Johnny's Pizza
This is saved in DB as
Johnny's Pizza
But if the user decides to edit, I repopulate the text <INPUT>
as follows
echo form_input('name', htmlspecialchars($name, ENT_QUOTES, 'UTF-8'));
which will show as
Johnny's Pizza
inside the input field.
PHP.net has a comment here suggesting to use
echo form_input('name', htmlspecialchars($name, ENT_QUOTES, 'UTF-8', FALSE));
that is, FALSE
referring to $double_encoding
, but I still get
Johnny's Pizza
in the input field.
Is there a way around this double encoding? Is this something that can be fixed while still using ENT_QUOTES
?
Using Codeigniter 2.0.3.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
htmlspecialchars
是正确的方法,如果直接将其输出到页面中,则不会给出您所描述的结果。据推测,
form_input
函数期望接收文本而不是 HTML,因此它自行运行htmlspecialchars
。如果是这样,解决方案是仅传递文本,而不是首先对 HTML 值进行编码。Using
htmlspecialchars
is the correct approach, and won't give the result you describe if you output it directly into the page.Presumably the
form_input
function expects to receive text and not HTML, so it runshtmlspecialchars
itself. If so, the solution is to just pass it text and not encode the value for HTML first.