gpt4 book ai didi

c# - 编码字符未正确呈现

转载 作者:行者123 更新时间:2023-11-30 21:53:00 25 4
gpt4 key购买 nike

我正在使用 HttpUtility.HtmlEncode 的简写对进入我的文本框的数据进行编码。

<asp:TextBox ID="txtProperty" runat="server" Text='<%#: Bind("Property")%>'></asp:TextBox>

我对编码字符行为方式的理解是,当您的网络浏览器呈现它们时,它们应该显示为它们所代表的字符,而不是实际的编码字符。作为这个example code在 MSDN 网站上建议。

但是我的编码字符不会以这种方式运行。

例如,从数据库中检索到的“£”字符在文本框中显示为:

£ symbol rendering incorrectly

而不是:

£ symbol rendering correctly

我不认为它与我的网站配置处理编码的方式有任何关系,因为如果我手动将文本设置为 HTML 中的编码字符:

<asp:TextBox ID="txtProperty" runat="server" Text="&#163;"></asp:TextBox>

它将编码的字符正确呈现为:

£ symbol rendering correctly

这表明我使用 HtmlEncode 的方式有问题。

我仍然尝试在我的 webconfig 中将编码显式设置为 UTF-8,但没有任何区别。

有人可以解释这种行为吗,或者这里可能有什么问题?

最佳答案

当你做 <%#: Bind("Property")%> ASP.NET 已经负责对字符串进行 HTML 编码,如果您对其进行预编码,您将陷入双重编码场景。

参见 ScottGu 的 New <%: %> Syntax for HTML Encoding Output in ASP.NET 4 (and ASP.NET MVC 2) :

ASP.NET 4 introduces a new IHtmlString interface (along with a concrete implementation: HtmlString) that you can implement on types to indicate that its value is already properly encoded (or otherwise examined) for displaying as HTML, and that therefore the value should not be HTML-encoded again.

The <%: %> code-nugget syntax checks for the presence of the IHtmlString interface and will not HTML encode the output of the code expression if its value implements this interface.

This allows developers to avoid having to decide on a per-case basis whether to use <%= %> or <%: %> code-nuggets.

Instead you can always use <%: %> code nuggets, and then have any properties or data-types that are already HTML encoded implement the IHtmlString interface.

关于c# - 编码字符未正确呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com