【问题标题】:ASP.NET 4.5 Webforms - HTML Encoding gone wrongASP.NET 4.5 Webforms - HTML 编码出错
【发布时间】:2016-01-15 02:29:37
【问题描述】:

我无法使用 ASP.NET 4.5 网络表单应用程序和新的 <%#: 语法来进行自动 HTML 编码。

我有一个这样的表单视图:

<asp:FormView runat="server" ID="FormViewCompany" ItemType="FormViewEncoding.Model.Company" DefaultMode="ReadOnly"
    SelectMethod="Select">
    <ItemTemplate>
        <em>Company</em>
        <br/><br/>
        <asp:Label runat="server" ID="lblName" Text="Name" Width="200px"/>
        <asp:TextBox runat="server" ID="tbxName" Text="<%#: Item.Name %>" Width="600px" />
        <br/>
        <asp:Label runat="server" ID="lblAddress" Text="Address" Width="200px"/>
        <asp:TextBox runat="server" ID="tbxAddress" Text="<%#: Item.Address %>" Width="600px" />
        <br/>
        <asp:Label runat="server" ID="lblZipAndCity" Text="Zip/City" Width="200px"/>
        <asp:TextBox runat="server" ID="tbxZip" Text="<%#: Item.ZipCode %>" Width="75px" />
        &nbsp;
        <asp:TextBox runat="server" ID="tbxCity" Text="<%#: Item.City %>" Width="525px"/>
        <br/>
    </ItemTemplate>    
</asp:FormView>

当我从我的 SQL Server 数据库中加载带有德语变音符号的公司时(简化为仅在此处返回对象的新实例):

public class Company
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string ZipCode { get; set; }
    public string City { get; set; }
}

public Company Select()
{
    return new Company
    {
        Name = "Müller & Söhne AG",
        Address = "Haupstrasse 14",
        ZipCode = "5600",
        City = "Münchenstein"
    };
}

我得到了这个好的输出!

为什么ü这样的德语变音符号被编码成#252; ??

这对我来说毫无意义.....我希望使用新的 &lt;%#: 数据绑定语法来进行自动 HTML 编码,以防止无意中呈现任何恶意代码 - 但如果所有德语变音符号都被“破坏”过程中,我也完全没用过那个功能,实在是太可惜了!

【问题讨论】:

  • 你能把你所有的公司课程贴出来吗?
  • @DanL:只是一个非常简单的 DTO - 添加到我的问题中

标签: webforms diacritics asp.net-4.5 html-encode


【解决方案1】:

我相信这是因为文本被编码了两次。

以下面一行为例:

<asp:TextBox runat="server" ID="tbxCity" Text="<%#: Item.City %>" Width="525px"/>

这实际上会变成:

<asp:TextBox runat="server" ID="tbxCity" Text="M&#252;nchenstein" Width="525px"/>

这是由于使用 语法完成的编码。

TextBox 控件本身也对其文本值进行 HtmlEncoding,因此 TextBox 控件将输出“M&amp;amp;#252;nchenstein”的 html 编码,即“M&amp;amp;#252;nchenstein”。

当浏览器呈现M&amp;amp;#252;nchenstein 时,您将看到M&amp;amp;#252;nchenstein

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多