PHP でiconvを使用して音訳をいじっています。特に、アクセント付きの文字を正規化し、他のスクリプトを UTF-8 からプレーン ASCII にローマライズしたいと考えています。
多くの文字 ( Ž
->などZ
) が機能する一方で、他の文字は奇妙な結果を出したり、エラーを発生させたりします。
たとえば、E ACUTE (U+00E9)は、取り除こうとしている分音符号を表そうとしているかのように、é
先頭に一重引用符 (U+0027) を付けて ASCII に音訳します。e
$utf_8 = "\xC3\xA9"; // <- é
$ascii = iconv( 'UTF-8', 'ASCII//TRANSLIT', $utf_8 );
// returns "'e", not "e"
ラテン語以外のスクリプトはさらに悪く、たとえば、Σ
ラテン語に音訳する必要があるギリシャ語シグマ (U+03A3)S
はまったく認識されず、エラーが発生します。
$utf_8 = "\xCE\xA3"; // <- Σ
$ascii = iconv( 'UTF-8', 'ASCII//TRANSLIT', $utf_8 );
// Raises notice: iconv(): Detected an illegal character in input string
最初のものにはほぼ対処できますが、「Σ」を「S」に音訳し、同等の文字を持つ他のスクリプトでこれを確実に行うにはどうすればよいですか?
ほとんどのヨーロッパ言語で機能する優れたソースがあれば、独自のテーブルを生成してもかまいません。
アクセント付きのラテン文字を正規化するのに役立つさまざまな照合テーブルを試しましたが、スクリプト間の音訳には機能しないことに注意してください。