簡體   English   中英

如何音譯非拉丁文字?

[英]How to transliterate non-latin scripts?

我正在使用iconv在PHP中進行音譯。 特別是我想規范化帶重音符號的字符並將其他腳本從UTF-8羅馬化為純ASCII。

當許多字符起作用時(例如Ž > Z ),其他字符卻給出了奇怪的結果或引發了錯誤。

例如,E急性é (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”,並在具有相同字符的其他腳本中可靠地做到這一點呢?

如果有一個適用於大多數歐洲語言的良好來源,我不介意生成自己的表。

請注意,我已經嘗試了各種排序規則表 ,這些對於規范帶重音的拉丁字符很有用,但是它們不適用於腳本之間的音譯。

我使用iconv不太幸運。 它總是設法發出一堆通知。

我最幸運的是使用自定義音譯表。 它遠非完美,但至少您會覺得自己有堅實的基礎。

我找不到音譯表的單一來源。 除了拉丁語腳本,我不熟悉其他任何內容都無濟於事。

我已經嘗試過類似的方法 -它主要基於Doctrine 1代碼,但並不完美:但是它似乎可以與我所提交的所有測試數據一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM