我该如何存储和检索英镑符号?

时间:2009-11-11 10:31:24

标签: javascript asp.net sql-server ajax character-encoding

这是我经常遇到的一个问题;我总是写一些可怕的小屋,但我确信必须是一个正确的处理方式(毕竟,想要使用英镑符号肯定并不罕见)。< / p>

问题:用户在CMS中的文本字段中输入英镑符号(£)。他们点击“保存”,然后使用JavaScript escape()函数转义表单字段值,并使用jQuery AJAX POST请求进行提交。但是,在某些时候,英镑符号会变成问号(不正确的字符编码?)。

我无法在保存到数据库之前将符号转换为HTML实体,因为当检索到值以显示在网站的前端时,它们是HTML编码的(因此实体将按原样显示) )。

为了一劳永逸地清除这一点,应该我在这里做什么?

3 个答案:

答案 0 :(得分:4)

您无需使用escape功能。 jQuery已经处理编码:

$.ajax({
    url: '/somepage',
    data: { param1: $('#textfield').val() },
    success: function() { }
});

只需确保您的应用程序设置为UTF-8编码:

<system.web>
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>

HTML页面也是:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

答案 1 :(得分:2)

  

使用JavaScript escape()函数

转义表单字段值

有你的问题。 escape是创建网址参数值的错误方法,通常永远不会被使用。您正在寻找encodeURIComponent,这是正确的。其中一个问题escape混乱是非ASCII字符,如£。

如果您正在使用jQuery,则永远不需要手动创建POST数据字符串;只需传递{x: '£'}之类的查询,它就会为您处理编码。

如果您的应用程序未设置为正确处理Unicode,则存储和检索£可能会有进一步的问题。理想情况下,您应该将您的页面作为UTF-8服务并使用Darin提到的UTF-8 IO,并使用NATIONAL个字符(NVARCHAR)在SQL Server中存储Unicode字符串。

  

我无法在保存到数据库之前将符号转换为HTML实体,因为当检索到值以便在网站的前端显示时,它们是HTML编码的

好!那是绝对正确的。您永远不应该将HTML编码的数据存储在数据库中,这完全是处理输出转义问题的错误方法。继续对所有经过输出的文本进行HTML编码。

答案 2 :(得分:0)

尝试将英镑符号保存为&amp; pound; ,这样当它在html响应中显示时,它将显示英镑符号。