为嘛我下载了一个pinyin.dat文件,使用正常,但是pinyin-utf8.dat就不正常呢。。用下面的程序,返回的都是‘_’ 本帖最后由 Clement_cc 于 2013-11-26 15:49:13 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那是当然的,你没看到 29 行的 $c = $str[$i].$str[$i+1]; 是以一个汉字两个字节计算的吗?他的算法太过复杂,完全没那个必要echo GetPinyin('为嘛我下载了一个');echo GetPinyin('但是pinyin-utf8.dat就不正常呢');function GetPinyin($txt) { static $dict; if(empty($dict)) { $fn = 'pinyin.dat'; foreach(file($fn) as $r) { $t = explode('`', trim($r)); $dict[$t[0]] = $t[1]; } } for($i=0; $i<iconv_strlen($txt, 'gbk'); $i++) { $ch = iconv_substr($txt, $i, 1, 'gbk'); $res[] = $ch; if(isset($dict[$ch])) $res[]= $dict[$ch]; } return join(' ', $res);}这个很简单的,要 utf-8 就将 pinyin.dat 另存为 utf-8 的并将代码中的 gbk 字样改成 utf-8 就可以了函数中使用了静态变量缓存字典在一个程序里,无论你执行多少次 GetPinyin,字典是会加载一次功能简陋,有待你自己扩充不过 6763 的汉字数只是 gb2312 的规模而 gbk 有两万七千多汉字呢 【紧急求助】php无法把二进制文件传进mysql!!!! php查询mysql表字段输出 生僻字无法显示的原因? 一个正则表达试的问题 晚上睡不着,起来问大家一个问题 做过工商银行B2C支付接口开发的朋友来帮帮看看 找PHP程序员,在广州,写两个小程序!酬劳面谈! 大虾救我的数据库啊 如何把$Array的内容写到文件 新手求助!! 这种数组该如何输出 如何 用php 实现 弹出一个层
他的算法太过复杂,完全没那个必要
echo GetPinyin('为嘛我下载了一个');
echo GetPinyin('但是pinyin-utf8.dat就不正常呢');function GetPinyin($txt) {
static $dict;
if(empty($dict)) {
$fn = 'pinyin.dat';
foreach(file($fn) as $r) {
$t = explode('`', trim($r));
$dict[$t[0]] = $t[1];
}
} for($i=0; $i<iconv_strlen($txt, 'gbk'); $i++) {
$ch = iconv_substr($txt, $i, 1, 'gbk');
$res[] = $ch;
if(isset($dict[$ch])) $res[]= $dict[$ch];
}
return join(' ', $res);
}这个很简单的,要 utf-8 就将 pinyin.dat 另存为 utf-8 的
并将代码中的 gbk 字样改成 utf-8 就可以了函数中使用了静态变量缓存字典
在一个程序里,无论你执行多少次 GetPinyin,字典是会加载一次
功能简陋,有待你自己扩充不过 6763 的汉字数只是 gb2312 的规模
而 gbk 有两万七千多汉字呢