在渲染之前对字符串中的转义字符进行Unescape

时间:2011-07-06 13:50:33

标签: c# asp.net html

我想在文本框中显示用双引号括起来的字符串(例如“ABC”)。目前它没有显示,因为双引号被转义。只有转义双引号才有问题。

E.g。

public const string countryName = "\"ABC\"";

<input id="txtCountryName" type="text" value="<%= countryName %>" />

我想避免使用正则表达式或替换方法来解决这个问题。

C#中是否有任何方法可以解决此问题。

3 个答案:

答案 0 :(得分:3)

你必须这样做:

<input id="txtCountryName" type="text" value="<%= Server.HtmlEncode(countryName) %>" />

<强>解释

问题是你的最终HTML是这样渲染的:

<input id="txtCountryName" type="text" value=""ABC"" />

您必须致电Server.HtmlEncode对HTML中的"进行编码。

答案 1 :(得分:2)

不,实际上,他们没有被转义。

要转义它们,或者将它们编码到HTML实体中,请使用HtmlEncode()

<input id="txtCountryName" type="text" value="<%=Server.HtmlEncode(countryName)%>" />

在ASP.NET 4上,您可以使用a different set of delimiters <%: %>进行自动转义:

<input id="txtCountryName" type="text" value="<%:countryName%>" />

答案 2 :(得分:1)

<input>不是服务器控件,因此您的示例只执行字符串替换。这产生了

的结果
<input id="txtCountryName" type="text" value=""ABC"" />

没有显示你想要的东西。

一个优雅的解决方案是使用服务器控件来使 ASP.NET设置属性而不是仅仅在HTML中进行字符串替换。这样,ASP.NET就会解决逃避问题。

步骤1:使输入控件成为服务器控件。您可以通过添加runat="server"来实现。

第2步:使用数据绑定语法(<%# ... %>)。

<input id="txtCountryName" type="text" runat="server" value="<%# countryName %>" />    

步骤3:在代码隐藏中执行数据绑定:

public const string countryName = "\"ABC\"";

protected void Page_Load(object sender, EventArgs e)
{
    this.DataBind();
}

Voilà,文本框显示"ABC"