我正在使用iconv在 PHP 中进行音译。特别是我想规范化重音字符并将其他脚本从 UTF-8 罗马化为纯 ASCII。
虽然许多字符都有效,但(例如Ž
-> Z
)其他字符会给出奇怪的结果或引发错误。
例如,E é
ACUTE (U+00E9) 转译为 ASCII,在其前面加上一个单引号 (U+0027),e
就好像它试图表示我试图摆脱的变音符号一样。
$utf_8 = "\xC3\xA9"; // <- é
$ascii = iconv( 'UTF-8', 'ASCII//TRANSLIT', $utf_8 );
// returns "'e", not "e"
非拉丁文字更糟糕,例如Σ
应该音译为拉丁文的希腊 sigma (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”,并在其他具有等效字符的脚本中可靠地做到这一点?
如果有适用于大多数欧洲语言的良好来源,我不介意生成自己的表格。
请注意,我尝试了各种排序表,它们对于规范化带重音的拉丁字符很有用,但它们不适用于在脚本之间进行音译。