代码之家  ›  专栏  ›  技术社区  ›  Mark Bell

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

  •  3
  • Mark Bell  · 技术社区  · 15 年前

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

    问题是:用户输入一个英磅符号( £ )进入CMS中的文本字段。他们单击“保存”,然后使用javascript对表单字段值进行转义。 escape() 函数并与jquery ajax一起提交 POST 请求。然而,在某一点上,磅符号变成了问号(字符编码错误?).

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

    为了我一次又一次的清理这一切,什么? 应该 我在这里?

    3 回复  |  直到 10 年前
        1
  •  4
  •   Darin Dimitrov    15 年前

    你不需要使用 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
  •  2
  •   bobince    15 年前

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

    这是你的问题。 escape 是创建URL参数值的错误方法,通常应该 永不使用 . 你在找 encodeURIComponent ,这是正确的。其中一件事 逃跑 乱七八糟的是非ASCII字符。

    如果您像您提到的那样使用jquery,则不需要手动创建post数据字符串;只需传入类似于 {x: '£'} 它将为您处理编码。

    如果您的应用程序没有设置为正确处理Unicode,那么存储和检索一个英镑可能会有进一步的问题。理想情况下,您应该以utf-8的形式提供页面,并使用darin提到的utf-8 IO,以及使用 NATIONAL 字符( NVARCHAR )在SQL Server中存储Unicode字符串。

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

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

        3
  •  0
  •   Himadri    15 年前

    尝试将英镑符号另存为 &磅; 所以当它显示在HTML响应中时,它将显示英国磅符号。