在渲染之前取消对字符串中转义字符的转义

本文关键字:字符串 转义字符 转义 取消 | 更新日期: 2023-09-27 18:01:14

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

例如

public const string countryName = "'"ABC'"";
<input id="txtCountryName" type="text" value="<%= countryName %>" />

我想避免使用regex或replace方法来解决这个问题。

C#中有什么方法可以解决这个问题吗。

在渲染之前取消对字符串中转义字符的转义

你必须这样做:

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

解释

问题是你的最终HTML是这样呈现的:

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

您必须调用Server.HtmlEncode才能用HTML对"进行编码。

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

要对它们进行转义,或者更确切地说,将它们编码到HTML实体中,请使用HtmlEncode():

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

在ASP.NET 4上,您可以使用一组不同的分隔符<%: %>进行自动转义:

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

<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:在codebehind:中执行数据绑定

public const string countryName = "'"ABC'"";
protected void Page_Load(object sender, EventArgs e)
{
    this.DataBind();
}

瞧,文本框显示"ABC"