我使用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"
非拉丁腳本是壞,例如希臘西格瑪Σ
(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,這對於使重音拉丁字符正常化非常有用,但它們不適用於在腳本之間進行音譯。
也許能夠從strtr得到一些愛。只需提供從一個角色到另一個角色的自定義地圖。看到這裏例如http://stackoverflow.com/questions/17850603/swap-two-words-in-a-string-php/17850665#17850665 – Orangepill
它得到我擔心的自定義地圖。編碼它不是問題。無論如何,'strtr'對於我的示例中的多字節字符不起作用。 – Tim