这是我经常遇到的一个问题;我总是写一些可怕的小屋,但我确信必须是一个正确的处理方式(毕竟,想要使用英镑符号肯定并不罕见)。< / p>
问题:用户在CMS中的文本字段中输入英镑符号(£
)。他们点击“保存”,然后使用JavaScript escape()
函数转义表单字段值,并使用jQuery AJAX POST
请求进行提交。但是,在某些时候,英镑符号会变成问号(不正确的字符编码?)。
我无法在保存到数据库之前将符号转换为HTML实体,因为当检索到值以显示在网站的前端时,它们是HTML编码的(因此实体将按原样显示) )。
为了一劳永逸地清除这一点,应该我在这里做什么?
答案 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响应中显示时,它将显示英镑符号。