如何保持ASP.NET TextBox不对其内容进行HTML编码?

时间:2009-09-01 11:23:27

标签: asp.net character-encoding

“问题”是我在FormView中有一个ASP.NET TextBox,其Text属性绑定到数据库表字段。在某些情况下,可能会在数据库中将HTML代码与普通文本结合使用。 RequestEncoding和ResponseEncoding设置为“iso-8859-1”(whitch是latin1)。有些字段可以组合拉丁字符和西里尔字符。输入西里尔字符(例如“д”)时没有问题。因为RequestEncoding也设置为iso-8859-1和浏览器的charset,浏览器将更改为“д”,它将保存在数据库中。这就是我想要的,但因为“д”将被转换为“& amp;#1076;”在将响应输出发送到浏览器之前设置为ASP.NET TextBox的Text-property时,我看到“д”保存数据后。

有人能告诉我如何阻止ASP.NET进行转换吗?

或者:在所有控件都已呈现后,有没有办法改变ASPX网站的完全输出? - 我可以用“&#”替换“& amp;#”。

3 个答案:

答案 0 :(得分:1)

我完成了这个,只是从Textbox继承并覆盖Text属性。它目前具有PersistenceMode.EncodedInnerDefaultProperty属性。您想将其更改为InnerDefaultProperty:

[BindableAttribute(true, BindingDirection.TwoWay)]
[PersistenceModeAttribute(PersistenceMode.EncodedInnerDefaultProperty)]
public virtual string Text { get; set; }

如果您希望将其应用于所有文本框,则可以使用标记映射来执行此操作。

参考资料

More on Persistence Mode
More on Textbox.Text property
More on Tag Mapping

答案 1 :(得分:0)

您可以在将文本插入数据库之前对其进行解码:

string htmlEncodedText = myTextbox.Text;
string htmlDecodedText = HttpUtility.UrlDecode(htmlEncodedText);

Encoding latinEncoding = Encoding.GetEncoding("8859-1");
Encoding utfEncoding = Encoding.UTF8;
byte[] utfBytes = utfEncoding .GetBytes(htmlDecodedText);
byte[] latinBytes =
    System.Text.Encoding.Convert(utfEncoding, latinEncoding, utfBytes);
string latinString = latinEncoding.GetString(latinBytes);

// TODO: Insert latinString into database

答案 2 :(得分:0)

我解决了我的问题(PortageMonkey向我展示了道路):

首先,我创建了一个继承自System.Web.UI.WebControls.TextBox的类“IsoTextBox”。由于Text属性始终返回非编码字符串,因此只需更改Text属性即可完成此任务。相反,我覆盖了渲染方法:

protected override void Render(HtmlTextWriter writer)
{
    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter source = new HtmlTextWriter(stringWriter);
    base.Render(source);
    writer.Write(stringWriter.ToString().Replace("&#", "&#"));
}

然后在web.config中添加了tagMapping:

<system.web>
      <pages>
        <tagMapping>
         <add mappedTagType="MyNamespace.IsoTextBox" tagType="System.Web.UI.WebControls.TextBox"/>
        </tagMapping>
      </pages>
      <globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1"/>
</system.web>

这非常有用!