如何防止html实体的双重编码,或以编程方式修复它们?
我正在使用HTML::Entities perl模块中的encode()函数来编码用户输入中的HTML实体。这里的问题是我们还允许用户直接输入HTML实体,这些实体最终被双重编码。
例如,用户可以输入:
Stackoverflow & Perl = Awesome…
这最终被编码为
Stackoverflow & Perl = Awesome…
这在浏览器中呈现为
Stackoverflow & Perl = Awesome…
我们希望将其呈现为
Stackoverflow & Perl = Awesome...
有没有办法阻止这种双重编码?或者是否有一个模块或代码片段可以轻松纠正这些双重编码问题?
非常感谢任何帮助!
答案 0 :(得分:6)
您可以先解码字符串:
my $input = from_user();
my $encoded = encode_entities( decode_entities $input );
答案 1 :(得分:4)
有一种非常简单的方法可以避免这种情况:
答案 2 :(得分:1)
考虑将调用保存到encode()
,直到您检索显示值,而不是在存储之前。只要您的检索机制保持一致,数据库中的额外数据可能就不值得烦恼了。
修改强>
重新阅读你的问题我现在意识到我的答案没有完全解决这个问题,因为稍后调用encode()
仍然会有相同的结果。我自己不知道替代方案,它可能没什么帮助,但您可能想要考虑找到一种更合适的编码方法,以尊重现有符号。