2012-07-25 47 views
7

我比较字符串并且必须替换JS中的变音符号,但似乎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; 
} 

随着搜索模式我想:

  • “A”, “O”, “U”
  • /A /,/ O /,/ U/
  • ä” “ö”,“ü”(以及彻底的绝望;-))

可以肯定,它不是与替换功能的问题我试过的indexOf:

console.log(value.indexOf('ä')); 

,但所有模式的输出是:-1

所以我想这是某种带有编码的问题,但正如我在页面上说,变音不只是看起来不错。

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

编辑: 即使我找到我的答案,问题并没有真正解决“在根”(编码)。 这是我的网页编码:

<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> 

数据库有:utf8_general_ci

似乎完全好了给我。

+1

你在数据库中使用什么编码你在你的网页中使用什么编码? – Marc 2012-07-25 15:10:02

+0

什么是字符串?记录它。您的方法可行,但正如您从indexOf中看到的那样,您的字符串不包含“ä”。 – Bergi 2012-07-25 15:11:12

+0

'“bäg”.replace(/ä/ g,“ae”); // ==>“baeg”',所以有些东西很可能与你的编码不​​符 – 2012-07-25 15:14:02

回答

21

要么确保你的脚本编码正确指定(在<script>标签或页面的页眉/元,如果它嵌入)或指定符号这将始终毫不含糊地解析为某个特定的Unicode代码点。

例如:

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

将始终与AE替换,不管是什么编码设置为您的网页/脚本,即使它是不正确。

下面是需要日耳曼语言代码:

// Ü, ü  \u00dc, \u00fc 
// Ä, ä  \u00c4, \u00e4 
// Ö, ö  \u00d6, \u00f6 
// ß  \u00df 
+0

非常感谢你,这个工程:-)我在页面上有utf-8编码:看起来完全正确我,所以我将只与工作...... – SamiSalami 2012-07-26 08:13:48

+0

这里有更多的代码:// U,U \t \t \ u00dc,\ u00fc // A,A \t \t \ u00c4,\ u00e4 // Ö,ö\t \t \ u00d6,\ u00f6 // \t \t \ u00df – 2017-01-19 22:10:09

+0

Å对于北欧国家://Å,å:\ u00c5,\ u00e5 – 2017-05-18 09:14:50

1

您需要先弄清楚您要替换的字符代码是什么。例如,根据字符编码,字符可以是8859,UTF-8或其他。他们也可以是字符符号,如“ä”

而不是猜测,打印出来。

请注意,您的传入数据可能不会一致地使用相同的字符集/字符编码 - 您需要检查数据来自何处。

所以使用字符串来看看传入的数据。 charCodeAt

检查toLowerCase之前的字符代码以确保它不会改变您的操作。你需要逐步调试。

最后,在您的编辑器中检查字符集设置,以确保您键入的字符是它应该是。您可能希望通过UTF8值与\uNNNN语法指定它,而不是打字,ö等

+2

无论你在页面中使用什么编码,在JS中一切都是Unicode和变音符**总是**相同的代码。 – 2012-07-25 15:15:03

+0

我认为我的文档编码(我的文件在编辑器中)并不重要,因为文本来自数据库,所以只有数据库和html元标记中的编码应该重要或不重要?而你的函数格式比较混乱,应该是string.charCodeAt(0); (0是第一个位置),但我真的没有想到它,这是一个很好的线索,不幸的是它并没有帮助 - 正确的unicode是在toLowerCase之前以及之后返回的。 – SamiSalami 2012-07-26 08:11:44

6

下面是取代最常见的字符产生谷歌友好的SEO链接功能:

function deUmlaut(value){ 
    value = value.toLowerCase(); 
    value = value.replace(/ä/g, 'ae'); 
    value = value.replace(/ö/g, 'oe'); 
    value = value.replace(/ü/g, 'ue'); 
    value = value.replace(/ß/g, 'ss'); 
    value = value.replace(/ /g, '-'); 
    value = value.replace(/\./g, ''); 
    value = value.replace(/,/g, ''); 
    value = value.replace(/\(/g, ''); 
    value = value.replace(/\)/g, ''); 
    return value; 
}