我正在使用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,这对于标注重音拉丁字符很有用,但它们不适用于脚本之间的音译。
答案 0 :(得分:0)
使用iconv
我没有太多运气。它总是设法抛出一堆通知。
我最好的运气是使用自定义音译表。它远非完美,但至少你会觉得你有一些坚实的基础。
我没有为音译表找到一个好的单一来源。除了拉丁文之外,我对其他任何东西都不熟悉没有帮助。
答案 1 :(得分:0)
我attempted something similar - 它主要基于Doctrine 1代码并且并不完美:但它似乎适用于我投入的所有测试数据。