以前在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这个模块的功能确实不够完善,只是汉字对拼音的转换
这个模块的功能确实不够完善,只是汉字对拼音的转换,没有考虑多音字的情况。