如何音译非拉丁文字?

时间:2013-07-25 16:35:22

标签: php localization iconv

我正在使用iconv在PHP中进行音译。特别是我想规范化重音字符并将其他脚本从UTF-8罗马化为纯ASCII。

虽然许多角色都有效,(例如Ž - > Z)其他角色会产生奇怪的结果或引发错误。

例如,E ACUTE é(U + 00E9)在e之前用单引号(U + 0027)音译为ASCII,好像它试图表示我正在尝试的变音符号摆脱。

$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”,并在具有相同字符的其他脚本中可靠地执行此操作?

如果有一个适用于大多数欧洲语言的好资源,我不介意生成我自己的表格。

请注意,我尝试了各种collation tables,这对于标注重音拉丁字符很有用,但它们不适用于脚本之间的音译。

2 个答案:

答案 0 :(得分:0)

使用iconv我没有太多运气。它总是设法抛出一堆通知。

我最好的运气是使用自定义音译表。它远非完美,但至少你会觉得你有一些坚实的基础。

我没有为音译表找到一个好的单一来源。除了拉丁文之外,我对其他任何东西都不熟悉没有帮助。

答案 1 :(得分:0)

attempted something similar - 它主要基于Doctrine 1代码并且并不完美:但它似乎适用于我投入的所有测试数据。