我正在比较字符串,必须替换JS中的变音符,但是JS似乎无法识别字符串中的变音符。文本来自数据库,在浏览器中变音符的确显示得很好。

function replaceUmlauts(string)
{
    value = string.toLowerCase();
    value = value.replace(/ä/g, 'ae');
    value = value.replace(/ö/g, 'oe');
    value = value.replace(/ü/g, 'ue');
    return value;
}

作为搜索模式,我尝试过:
  • “ä”,“ö”,“ü”
  • /ä/,/ö/,/ü/
  • ä”,“ö”,“ü”(完全绝望;-))

  • 可以肯定的是,我尝试使用indexOf的替换功能不是问题:
    console.log(value.indexOf('ä'));
    

    但是所有模式的输出是:-1
    因此,我认为编码存在某种问题,但是正如我在页面上所说的那样,变音符看起来确实不错。

    有任何想法吗?这看起来很简单...

    编辑:
    即使找到答案,也不能真正“从根本上”解决问题(编码)。
    这是我的页面编码:
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
    

    该数据库具有:utf8_general_ci

    对我来说似乎完全没问题。

    最佳答案

    请确保正确指定了脚本的编码(在<script>标记中,或者在页面的 header /元数据中,如果已嵌入),或者使用\uNNNN语法指定符号,这些符号将始终明确地解析为某些特定的Unicode代码点。

    例如:

    str.replace(/\u00e4/g, "ae")
    

    即使为页面/脚本设置了什么编码,即使它不正确,也将始终用ae替换ä。

    以下是日耳曼语所需的代码:
    // Ü, ü     \u00dc, \u00fc
    // Ä, ä     \u00c4, \u00e4
    // Ö, ö     \u00d6, \u00f6
    // ß        \u00df
    

    09-13 09:15