【问题标题】:How to handle (® ´ © ¿ ¡ ° À ) special characters in javascript?如何处理 (® ´ © ¿ ¡ ° À ) javascript 中的特殊字符?
【发布时间】:2010-06-09 09:18:14
【问题描述】:

我需要开发一个 javascript 函数以不允许字符串中出现特殊字符 (® ´ © ¿ ¡ ° À )。问题是 IE8 无法识别字符串中的特殊字符并在使用 indexOf() 方法时返回 -1。处理这些特殊字符的正确方法是什么?

【问题讨论】:

  • 不确定 - 这不是与编码相关的问题吗?
  • 正如一般建议:不要不允许特殊字符,而是允许某些字符集。列出所有你不想要的“特殊字符”几乎是不可能的,指定你想要的要容易得多。

标签: javascript


【解决方案1】:

只要您的所有编码都是正确的(您是否将文件保存为 UTF-8?它是作为 UTF-8 提供的吗?),您应该能够包含这些特殊字符。但是,您可以在 JavaScript 中使用 \u 转义字符,后跟十六进制字符代码。

这是一个实用函数,您可以使用(例如,在您的 JavaScript 控制台中)进行转换:

function escapeForCharacter(character){
    var escape = character.charCodeAt('0').toString(16);
    while(escape.length < 4){ escape = '0' + escape; }
    return '\\u'+escape;
}

但是,我会接受 deceze 的建议。如果转义特殊字符不是一种选择(我总是更喜欢转义而不是剥离,因为它不太可能做一些会惹恼你的用户的事情,比如从他们的名字中删除字母 (免责声明:我的名字有一个 'í ')),使用带有正则表达式的Stringreplace 方法。这将删除所有非 ASCII 字符:

string.replace(/[^\u0020-\u007a]/g, '');

【讨论】:

    【解决方案2】:
    var c = "® ´ © ? ! ° A ";
    alert(c.indexOf('©'));
    

    正确地为我工作。唯一的区别在于编码之间 -> in Win1250 它返回 4,在 utf-8 6

    (在 IE 中)

    【讨论】:

    • 嗨:当我在单独的 html 文件中使用上述内容时,它正在工作。但是当我与我的应用程序合并时,它显示为字符的方框
    • 正如我评论你的问题 - 你可能混淆了编码。例如,“c”字符串可能在 utf-8 中,而您正在尝试将 indexOf 与 ansi 编码字符串一起使用。
    【解决方案3】:

    你可以使用正则表达式和函数匹配替换

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多