php 获取拼音首字母的函数,有点小问题。指点迷津。

lonelyriver 2009-06-08 06:32:20
从网上找的一段代码,在调试的时候输入其他汉字 可以正确输出,唯独 这个 ‘好’字没法正确输出。为什么呢 ???
各位达人还有没有 更好的代码呢 ??如果有还请分享下哦 。
最好是 能够处理汉字词组,而不是单个汉字的。
<?php

function getfirstchar($s0){

if($fchar>=ord("a") and $fchar<=ord("Z") )return strtoupper($s0{0});
$s=iconv("UTF-8","gb2312", $s0);
$asc=ord($s{0})*256+ord($s{1})-65536;
if($asc>=-20319 and $asc<=-20284)return "A";
if($asc>=-20283 and $asc<=-19776)return "B";
if($asc>=-19775 and $asc<=-19219)return "C";
if($asc>=-19218 and $asc<=-18711)return "D";
if($asc>=-18710 and $asc<=-18527)return "E";
if($asc>=-18526 and $asc<=-18240)return "F";
if($asc>=-18239 and $asc<=-17923)return "G";
if($asc>=-17922 and $asc<=-17418)return "I";
if($asc>=-17417 and $asc<=-16475)return "J";
if($asc>=-16474 and $asc<=-16213)return "K";
if($asc>=-16212 and $asc<=-15641)return "L";
if($asc>=-15640 and $asc<=-15166)return "M";
if($asc>=-15165 and $asc<=-14923)return "N";
if($asc>=-14922 and $asc<=-14915)return "O";
if($asc>=-14914 and $asc<=-14631)return "P";
if($asc>=-14630 and $asc<=-14150)return "Q";
if($asc>=-14149 and $asc<=-14091)return "R";
if($asc>=-14090 and $asc<=-13319)return "S";
if($asc>=-13318 and $asc<=-12839)return "T";
if($asc>=-12838 and $asc<=-12557)return "W";
if($asc>=-12556 and $asc<=-11848)return "X";
if($asc>=-11847 and $asc<=-11056)return "Y";
if($asc>=-11055 and $asc<=-10247)return "Z";
return null;
}

echo getfirstchar("好");
?>


...全文
202 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
neohope 2009-06-08
  • 打赏
  • 举报
回复
原来没有H的返回值,改成这个试试
if($asc>=-17922 and $asc<=-17418)return "H";

lonelyriver 2009-06-08
  • 打赏
  • 举报
回复
http://www.amigosky.com/read.php?205
提供个连接 织梦做的,挺不错的
php 获取汉字的拼音(全拼音或者拼音首字母)
试过了 非常不错 。还附有一文本数据库
Exbox 2009-06-08
  • 打赏
  • 举报
回复
……我脑残了,汉字里本来就没有I开头的字母…把return "I"改成"H"就行了嘛…
查了半天表…发现没有找到I,这才想起来= =||
Exbox 2009-06-08
  • 打赏
  • 举报
回复
…“好”的字母是H,但是这个定义里明显没有定义H的范围…
if($asc>=-18239 and $asc<=-17923)return "G";
if($asc>=-17922 and $asc<=-17418)return "I";

网上多数是根据gb2312的排列方法是按字母排列这一点,进行查找对照的。还有一些是根据汉字来匹配首字母,都差不多,没什么技术含量…以前研究这个问题的时候找到一个前辈写的依据输入法还是什么…来判断首字母的代码,忘了在哪了= =||工作中处理数据的时候,首字母是用excel来取,SQL导入数据库里的

H的字符范围,按照这个代码的写法应该是
if($asc>=-17947 and $asc<=-17432)return "H";
ruanchao 2009-06-08
  • 打赏
  • 举报
回复
没有整过,一同关注。
daguaio_O 2009-06-08
  • 打赏
  • 举报
回复
运行不起来啊。$fchar未定义

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧