当输入中允许 html 实体时,如何防止它们的双重编码

发布于 2024-08-28 04:49:28 字数 631 浏览 8 评论 0原文

如何防止 html 实体的双重编码,或以编程方式修复它们?

我正在使用 HTML::Entities perl 模块中的encode() 函数进行编码用户输入中的 HTML 实体。这里的问题是,我们还允许用户直接输入 HTML 实体,而这些实体最终会被双重编码。

例如,用户可以输入:

Stackoverflow & Perl = Awesome…

这最终被编码为

Stackoverflow & Perl = Awesome…

这在浏览器中呈现为

Stackoverflow & Perl = Awesome…

我们希望它呈现为

Stackoverflow & Perl = Awesome...

有没有办法防止这种双重编码?或者是否有一个模块或代码片段可以轻松纠正这些双重编码问题?

非常感谢任何帮助!

How can I prevent double encoding of html entities, or fix them programmatically?

I am using the encode() function from the HTML::Entities perl module to encode HTML entities in user input. The problem here is that we also allow users to input HTML entities directly and these entities end up being double encoded.

For example, a user may enter:

Stackoverflow & Perl = Awesome…

This ends up being encoded to

Stackoverflow & Perl = Awesome…

This renders in the browser as

Stackoverflow & Perl = Awesome…

We want this to render as

Stackoverflow & Perl = Awesome...

Is there a way to prevent this double encoding? Or is there a module or snippet of code that can easily correct these double encoding issues?

Any help is greatly appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

把人绕傻吧 2024-09-04 04:49:28

您可以先解码字符串:

my $input = from_user();

my $encoded = encode_entities( decode_entities $input );

You can decode the string first:

my $input = from_user();

my $encoded = encode_entities( decode_entities $input );
哽咽笑 2024-09-04 04:49:28

有一个非常简单的方法可以避免这种情况:

  1. 在输入时删除所有实体(将它们转换为 Unicode)
  2. 在输出阶段再次编码为实体。

There is an extremely simple way to avoid this:

  1. Remove all the entities upon input (turn them into Unicode)
  2. Encode into entities again at the stage of output.
痴情换悲伤 2024-09-04 04:49:28

请考虑保存对 encode() 的调用,直到检索要显示的值为止,而不是在存储它之前。只要您的检索机制保持一致,数据库中的额外数据可能就不值得担心。

编辑

重新阅读您的问题,我现在意识到我的答案并没有完全解决问题,因为稍后调用 encode() 仍会得到相同的结果。我自己不知道替代方案,它可能没有太大帮助,但您可能需要考虑寻找一种更合适的编码方法来尊重现有符号。

Consider saving the call to encode() until you retrieve the value for display, rather than before you store it. So long as you are consistent in your retrieval mechanism, the extra data in your database probably isn't worth fretting over.

Edit

Re-reading your question I realize now my answer doesn't fully address the issue seeing as calling encode() later will still have the same results. Not knowing of an alternative myself, it may not be much help, but you may want to consider finding a more suitable method for encoding that will respect existing symbols.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文