ASP.NET 4.5 Webforms - HTML 编码出错
ASP.NET 4.5 Webforms - HTML Encoding gone wrong
我在使用 ASP.NET 4.5 webforms 应用程序和新的 <%#:
语法进行自动 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" />
<asp:TextBox runat="server" ID="tbxCity" Text="<%#: Item.City %>" Width="525px"/>
<br/>
</ItemTemplate>
</asp:FormView>
当我从我的 SQL 服务器数据库加载名称和地址中包含德语变音符号的公司时(这里简化为 return 对象的新实例):
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"
};
}
我得到的输出 NOT 很好!
为什么 像 ü
这样的德语变音符号被编码成 #252;
?
这对我来说毫无意义.....我希望使用新的 <%#:
数据绑定语法进行自动 HTML 编码以防止无意中呈现任何恶意代码 - 但如果所有德国变音符号都在这个过程中获得 "mangled",我绝对不会使用这个功能,这真的很遗憾!
我认为这是因为文本被编码了两次。
以下面一行为例:
<asp:TextBox runat="server" ID="tbxCity" Text="<%#: Item.City %>" Width="525px"/>
这将有效地变成:
<asp:TextBox runat="server" ID="tbxCity" Text="Münchenstein" Width="525px"/>
这是由于使用 <%#: %> 语法完成的编码。
TextBox 控件本身也对其文本值进行 HtmlEncoding,因此 TextBox 控件将输出“Münchenstein
”的 html 编码,即“M&#252;nchenstein
”。
当浏览器呈现 M&#252;nchenstein
时,您将看到 Münchenstein
。
我在使用 ASP.NET 4.5 webforms 应用程序和新的 <%#:
语法进行自动 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" />
<asp:TextBox runat="server" ID="tbxCity" Text="<%#: Item.City %>" Width="525px"/>
<br/>
</ItemTemplate>
</asp:FormView>
当我从我的 SQL 服务器数据库加载名称和地址中包含德语变音符号的公司时(这里简化为 return 对象的新实例):
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"
};
}
我得到的输出 NOT 很好!
为什么 像 ü
这样的德语变音符号被编码成 #252;
?
这对我来说毫无意义.....我希望使用新的 <%#:
数据绑定语法进行自动 HTML 编码以防止无意中呈现任何恶意代码 - 但如果所有德国变音符号都在这个过程中获得 "mangled",我绝对不会使用这个功能,这真的很遗憾!
我认为这是因为文本被编码了两次。
以下面一行为例:
<asp:TextBox runat="server" ID="tbxCity" Text="<%#: Item.City %>" Width="525px"/>
这将有效地变成:
<asp:TextBox runat="server" ID="tbxCity" Text="Münchenstein" Width="525px"/>
这是由于使用 <%#: %> 语法完成的编码。
TextBox 控件本身也对其文本值进行 HtmlEncoding,因此 TextBox 控件将输出“Münchenstein
”的 html 编码,即“M&#252;nchenstein
”。
当浏览器呈现 M&#252;nchenstein
时,您将看到 Münchenstein
。