22

文字列を比較しているので、JSのウムラウトを置き換える必要がありますが、JSは文字列のウムラウトを認識していないようです。テキストはデータベースからのものであり、ブラウザではumlautsは正常に表示されます。

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

私が試した検索パターンとして:

  • 「ä」、「ö」、「ü」
  • /ä/、/ö/、/ü/
  • " ä"、 " ö"、 " ü"(まあ完全な絶望;-))

確かに、私がindexOfを試したreplace関数では問題ではないことを確認してください。

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

ただし、すべてのパターンの出力は次のとおりです。-1

ですから、エンコーディングに何らかの問題があると思いますが、ページで述べたように、umlautsは問題なく見えます。

何か案は?これはとても簡単なようです...

編集:私の答えを見つけたとしても、問題は「ルートで」(エンコーディング)実際には解決されませんでした。これは私のページのエンコーディングです:

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

データベースには次のものがあります:utf8_general_ci

私には完全に大丈夫のようです。

4

5 に答える 5

51

スクリプトのエンコーディングが正しく指定されていることを確認するか(<script>タグで、または埋め込まれている場合はページのヘッダー/メタで)、\uNNNN特定のUnicodeコードポイントに常に明確に解決される構文でシンボルを指定します。

例えば:

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

ページ/スクリプトにどのエンコーディングが設定されていても、それが正しくない場合でも、常にäをaeに置き換えます。

ゲルマン語に必要なコードは次のとおりです。

// Ü, ü     \u00dc, \u00fc
// Ä, ä     \u00c4, \u00e4
// Ö, ö     \u00d6, \u00f6
// ß        \u00df
于 2012-07-25T15:18:04.847 に答える
21

ドイツ語のウムラウトを巧妙に尊重するケースに置き換えることを検討している場合は、これを使用してください(オープンソース、共有させていただきます、すべて私が作成します)。

const 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) => {
      const 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]
    );
}

const test = ['Übung', 'ÜBUNG', 'üben', 'einüben', 'EINÜBEN', 'Öde ätzende scheiß Übung']
test.forEach((str) => console.log(str + " -> " + replaceUmlaute(str)))

そうなる:

  • Übung->Uebung
  • ÜBUNG->UEBUNG
  • üben->ueben
  • einüben->einueben
  • EINÜBEN->EINUEBEN
  • Ä、Öについても同じです
  • シンプルなß->ss
于 2019-01-24T11:51:42.007 に答える
10

最も一般的な文字を置き換えて、Googleに適したSEOURLを生成する関数は次のとおりです。

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;
}
于 2016-10-13T07:48:15.490 に答える
2

最初に、置き換えようとしている文字コードを把握する必要があります。たとえば、文字エンコードに応じて、文字は8859、UTF-8などになります。「ä」などの文字記号にすることもできます

推測するのではなく、印刷してください。

また、受信データが同じ文字セット/文字エンコードを一貫して使用していない可能性があることに注意してください。データの送信元を確認する必要があります。

したがって、文字列を使用して受信データを確認します。charCodeAt

の前に文字コードをチェックして、toLowerCase変更されていないことを確認してください。ステップバイステップでデバッグする必要があります。

最後に、エディターで文字セットの設定をチェックして、入力したäが正しいものであることを確認します。ä、öなどを入力するのではなく、UTF8値を使用して指定することをお勧めします

于 2012-07-25T15:13:40.790 に答える
0

ドイツ語のウムラウトをhtmlの特殊文字に変換するための小さなスニペットが必要な場合は、次のようにします。

function fixUmlauts(value) {
    value = value.replace(/ä/g, '&auml;');
    value = value.replace(/ö/g, '&ouml;');
    value = value.replace(/ü/g, '&uuml;');
    value = value.replace(/ß/g, '&szlig;');
    value = value.replace(/Ä/g, '&Auml;');
    value = value.replace(/Ö/g, '&Ouml;');
    value = value.replace(/Ü/g, '&Uuml;');
    return value;
}

于 2020-10-15T17:44:25.950 に答える