【问题标题】:How should I store and retrieve UK pound symbols?我应该如何存储和检索英镑符号?
【发布时间】:2009-11-11 10:31:24
【问题描述】:

这是我经常遇到的问题;我总是会写出一些可怕的东西,但我确信必须有一个正确的方法来处理它(毕竟,想要使用英镑符号肯定并不少见)。

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

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

为了一劳永逸地为我解决这个问题,我应该在这里做什么?

【问题讨论】:

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


    【解决方案1】:

    您不需要使用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" />
    

    【讨论】:

      【解决方案2】:

      使用 JavaScript escape() 函数对表单字段值进行转义

      你的问题。 escape 是创建 URL 参数值的错误方法,通常永远不要使用。您正在寻找encodeURIComponent,它正确地完成了它。 escape 搞砸的一件事是像 £ 这样的非 ASCII 字符。

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

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

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

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

      【讨论】:

      • 谢谢 - 如果我能接受两个答案,我也会接受这个。
      【解决方案3】:

      尝试将英镑符号保存为£,这样当它显示在 html 响应中时就会显示英镑符号。

      【讨论】:

      • 正如我在问题中所说,我不能这样做,因为输出是 HTMLEncoded。
      • 虽然没有直接回答这个问题。然而,@himadri 指出了一种避免编码和解码乐趣的替代方法。没有必要投反对票。我想我发现拥有 £ 很有用刚刚投了赞成票,可能有人使用带有非编码或纯 HTML 的 Ajax 会使用它。我尊重这个家伙..!!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      相关资源
      最近更新 更多