2

我正在使用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”,并在其他具有等效字符的脚本中可靠地做到这一点?

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

请注意,我尝试了各种排序表,它们对于规范化带重音的拉丁字符很有用,但它们不适用于在脚本之间进行音译。

4

2 回答 2

0

尝试过类似的东西——它主要基于 Doctrine 1 代码并且并不完美:但它似乎适用于我扔给它的所有测试数据。

于 2013-07-26T08:39:03.033 回答
0

我使用iconv. 它总是设法抛出一堆通知。

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

我还没有找到一个很好的音译表单一来源。我对拉丁文以外的任何东西都不熟悉,这无济于事。

于 2013-07-25T16:44:35.870 回答