我正在比较字符串并且必须替换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
对我来说似乎完全没问题。
答案 0 :(得分:30)
确保正确指定了脚本的编码(在<script>
标记中或在页面的标头/元中,如果它已嵌入)或指定具有\uNNNN
语法的符号,该符号将始终明确地解析为某些特定的Unicode代码点
例如:
str.replace(/\u00e4/g, "ae")
无论为您的页面/脚本设置了什么编码,即使它不正确,也总会将ä替换为ae。
以下是日耳曼语言所需的代码:
// Ü, ü \u00dc, \u00fc
// Ä, ä \u00c4, \u00e4
// Ö, ö \u00d6, \u00f6
// ß \u00df
答案 1 :(得分:6)
这是一个替代最常见的字符以生成Google友好的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;
}
答案 2 :(得分:3)
如果您希望巧妙地尊重案件的情况来替换德国Umlaute,请使用此代码(开源,乐于分享,全由我本人):
let umlautMap = {
'\u00dc': 'UE',
'\u00c4': 'AE',
'\u00d6': 'OE',
'\u00fc': 'ue',
'\u00e4': 'ae',
'\u00f6': 'oe',
'\u00df': 'ss',
}
function replaceUmlaute(str) {
return str
.replace(/[\u00dc|\u00c4|\u00d6][a-z]/g, (a) => {
var big = umlautMap[a.slice(0, 1)];
return big.charAt(0) + big.charAt(1).toLowerCase() + a.slice(1);
})
.replace(new RegExp('['+Object.keys(umlautMap).join('|')+']',"g"),
(a) => umlautMap[a]
);
}
它将:
答案 3 :(得分:2)
您需要先弄清楚您要替换的字符代码是什么。例如,根据字符编码,字符可以是8859,UTF-8或其他字符。它们也可以是字符符号,例如“ä”
而不是猜测,打印出来。
请注意,您的传入数据可能不会始终使用相同的字符集/字符编码 - 您需要检查数据的来源。
因此,请使用字符串查看传入的数据。 charCodeAt
检查toLowerCase
之前的字符代码,确保它不会改变您的内容。您需要逐步调试。
最后,检查编辑器中的字符集设置,确保键入的ä应该是它应该是的。您可能希望通过UTF8值指定它,而不是键入ä,ö等
答案 4 :(得分:0)
如果您需要一些代码片段将德国变音符号转换为html特殊字符,请执行以下操作:
function fixUmlauts(value) {
value = value.replace(/ä/g, 'ä');
value = value.replace(/ö/g, 'ö');
value = value.replace(/ü/g, 'ü');
value = value.replace(/ß/g, 'ß');
value = value.replace(/Ä/g, 'Ä');
value = value.replace(/Ö/g, 'Ö');
value = value.replace(/Ü/g, 'Ü');
return value;
}