在渲染之前取消对字符串中转义字符的转义
本文关键字:字符串 转义字符 转义 取消 | 更新日期: 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"
。