以前在MediaWiki中見過一個擴展程序可以實現漢字轉拼音,但好像是固定漢字轉換,不能是變量,所以也沒有用。這幾天在用Drupal的時候查到資料說Transliteration這個模塊可以用于中文轉拼音,而這個模塊也用于将上傳包含漢字字符文件名的文件自動轉拼音文件名,以前就曾經安裝用過,于是打開該模塊的Readme查看,原來很簡單就可以調用其中的函數來實現。
漢字轉換函數:
if (function_exists('transliteration_get')) {
$transliterated = transliteration_get($text, $unknown, $source_langcode);
}
文件名轉換函數:
if (function_exists('transliteration_clean_filename')) {
$transliterated = transliteration_clean_filename($filename, $source_langcode);
}
注意$source_langcode是原始語言,可以使用系統默認語言:
$output = transliteration_get($text, '?', language_default('language'));
這個功能很方便,不過自帶的數據中拼音錯誤不少,還缺了一些漢字的拼音,需要用這個的數據替換辦法來修改、補充。辦法是先查出漢字的Unicode編碼,然後找到對應的文件、對應的行列,核對自帶數據是否錯誤或者缺失,如果要糾正,就在文件下面添加:
$variant['zh-hans'] = array(
0xCF => 'Yi ',
);
除了Transliteration模塊外,Autopath模塊其實也帶有漢字拼音轉換功能,轉換表中也有一些錯誤和缺失,可以參看:i18n-ascii-full.txt,或者下載保存。這些錯誤真是可恨,本來好好的功能給破壞了,要糾正起來還是要花不少時間去校對的,但願以後有人來做好正确的。
附幾個例子,注意其中有多音字、錯誤拼音、缺失拼音的情況:
原來錯誤的:
漢字轉換好!=>Yi Zi Zhuan Huan Hao !
漢=>Yi
藏=>Cang
一=>?
癌=>Yan
肮=>Hang
“2”=>"2"
經過修複的:
<?php function pinyin($text){ $unknown="?"; $source_langcode="zh-hans"; return transliteration_get($text, $unknown, $source_langcode); } function py($text){ echo $text."=>".pinyin($text)."
"; } py("漢字轉換好!"); py("漢"); py("藏"); py("一"); py("癌"); py("肮"); py("“2”"); ?>
评论2
這個模塊翻譯多音字出錯,比如 會計基礎 會翻譯成
這個模塊翻譯多音字出錯,比如 會計基礎 會翻譯成 hui ji ji chu這個模塊的功能确實不夠完善,隻是漢字對拼音的轉換
這個模塊的功能确實不夠完善,隻是漢字對拼音的轉換,沒有考慮多音字的情況。