一、公司同事整理的类,挺实用的.相信拿出来分享下他不会介意的O(∩_∩)O.不过如果首字母是数字或英文会有些问题.
/**<BR> * Helper_Spell 汉字拼音首字母工具类<BR> *<BR> * @category Helper<BR> * @package Helper_Spell<BR> * @author Lancer <em>/本2文来源[email protected]搞@^&代*@码2网</em><strong>搞gaodaima代码</strong><BR> * @version 1.0<BR> * @see Translation_Big2gb<BR> */</P><P>class Helper_Spell {<BR>/**<BR> * $_pinyins<BR> * @var array<BR> * @access private<BR> */<BR>private $_pinyins = array(<BR> 176161 => 'A',<BR> 176197 => 'B',<BR> 178193 => 'C',<BR> 180238 => 'D',<BR> 182234 => 'E',<BR> 183162 => 'F',<BR> 184193 => 'G',<BR> 185254 => 'H',<BR> 187247 => 'J',<BR> 191166 => 'K',<BR> 192172 => 'L',<BR> 194232 => 'M',<BR> 196195 => 'N',<BR> 197182 => 'O',<BR> 197190 => 'P',<BR> 198218 => 'Q',<BR> 200187 => 'R',<BR> 200246 => 'S',<BR> 203250 => 'T',<BR> 205218 => 'W',<BR> 206244 => 'X',<BR> 209185 => 'Y',<BR> 212209 => 'Z',<BR> 215249 => 'Z',<BR>);</P><P><BR>/**<BR> * $_charset<BR> * @var string<BR> * @access private<BR> */<BR>private $_charset = null;<br><br>/**<BR> * __construct 构造函数, 指定需要的编码 default: utf-8 支持utf-8, gb2312<BR> *<BR> * @param unknown_type $charset<BR> */<BR>public function __construct( $charset = 'utf-8' ) {<BR> $this->_charset = $charset;<BR>}</P><P>/**<BR> * getInitialsFirst 返回首个汉字的拼音<BR> *<BR> * @access public<BR> * @static<BR> * @param string $str<BR> * @return string<BR> * @example Helper_Spell::getInitialsFirst('我的爱'); => w<BR> */<BR>public static function getInitialsFirst( $str, $charset = 'utf-8' ) {<BR> $chars = array(<BR> 'A','B','C','D','E','F',<BR> 'G','H','I','J','K','L',<BR> 'M','N','O','P','Q','R',<BR> 'S','T','U','V','W','X',<BR> 'Y','Z');</P><P><BR> $string = self::getInitials( $str );<BR> $length = strlen($string);</P><P><BR> for($i=0; $i < $length; $i++) {<BR> if ( in_array( $string{$i}, $chars ) ) {<BR> return $string{$i};<BR> }<BR> }<BR> return '*';<BR>}</P><P><BR>/**<BR> * getInitials 返回拼音组合<BR> *<BR> * @access public<BR> * @static<BR> * @param string $str<BR> * @return string<BR> * @example Helper_Spell::getInitials('我的爱'); => wda<BR> */<BR>public static function getInitials( $str, $charset = 'utf-8' ) {<BR> $instance = new Helper_Spell( $charset );<BR> return $instance->_getInitials( $str );<BR>}</P><P><BR>/**<BR> * _getInitials 获取中文字串的拼音首字符<BR> * 注:英文的字串:不变返回(包括数字) eg .abc123 => abc123<BR> * 中文字符串:返回拼音首字符 eg. 王小明 => WXM<BR> * 中英混合串: 返回拼音首字符和英文 eg. 我i我j => WIWJ<BR> *<BR> * @access private<BR> * @param string $str<BR> * @return string<BR> */<BR>private function _getInitials( $str, $translation=TRUE ){<BR> if ( empty($str) ) return '';<BR> if ( $this->_isAscii($str[0]) && $this->_isAsciis( $str ))<BR> return $str;<br><br> if ( $translation )<BR> $str = Translation_Big2gb::big2gb( $str );<br><br> $result = array();<BR> if ( $this->_charset == 'utf-8' ){<BR> //IGNORE很重要,加上这个就可以是ICONV()函数忽略错误,继续执行<BR> $str = iconv( 'utf-8', 'gbk//IGNORE', $str );<BR> }<BR> $words = $this->_cutWord( $str );</P><P><BR> foreach ( $words AS $word ) { <BR> if ( $this->_isAscii($word) ) {//非中文<BR> $result[] = $word;<BR> continue;<BR> }<BR> $code = ( ord(substr($word,0,1)) ) * 1000 + (ord(substr($word,1,1)));<BR> //获取拼音首字母A--Z</P><P><BR> if ( ($i = $this->_search($code)) != -1 ){<BR> $result[] = $this->_pinyins[$i];<BR> }<BR> }<BR> return strtoupper(implode('', $result));<BR>}</P><P><BR>/**<BR> * _msubstr 获取中文字符串<BR> *<BR> * @access private<BR> * @param string $str<BR> * @param int $start<BR> * @param int $len<BR> * @return string<BR> */<BR>private function _msubstr ($str, $start, $len) {<BR> $start = $start * 2;<BR> $len = $len * 2;<BR> $strlen = strlen($str);<BR> $result = '';<BR> for ( $i = 0; $i < $strlen; $i++ ) {<BR> if ( $i >= $start && $i < ($start + $len) ) {<BR> if ( ord(substr($str, $i, 1)) > 129 ) $result .= substr($str, $i, 2);<BR> else $result .= substr($str, $i, 1);<BR> }<BR> if ( ord(substr($str, $i, 1)) > 129 ) $i++;<BR> }<BR> return $result;<BR>}</P><P><BR>/**<BR> * _cutWord 字符串切分为数组 (汉字或者一个字符为单位)<BR> *<BR> * @access private<BR> * @param string $str<BR> * @return array<BR> */<BR>private function _cutWord( $str ) {<BR> $words = array();<BR> while ( $str != "" ) {<BR> if ( $this->_isAscii($str) ) {//非中文<BR> $words[] = $str[0];<BR> $str = substr( $str, strlen($str[0]) );<BR> } else {<BR> $word = $this->_msubstr( $str, 0, 1 );<BR> $words[] = $word;<BR> $str = substr( $str, strlen($word) );<BR> }<BR> }<BR> return $words;<BR>}</P><P><BR>/**<BR> * _isAscii 判断字符是否是ascii字符<BR> *<BR> * @access private<BR> * @param string $char<BR> * @return bool<BR> */<BR>private function _isAscii( $char ) {<BR> return ( ord( substr($char,0,1) ) < 160 );<BR>}</P><P> </P><P>/**<BR> * _isAsciis 判断字符串前3个字符是否是ascii字符<BR> *<BR> * @access private<BR> * @param string $str<BR> * @return bool<BR> */<BR>private function _isAsciis( $str ) {<BR> $len = strlen($str) >= 3 ? 3: 2;<BR> $chars = array();<BR> for( $i = 1; $i < $len -1; $i++ ){<BR> $chars[] = $this->_isAscii( $str[$i] ) ? 'yes':'no';<BR> }<BR> $result = array_count_values( $chars );<BR> if ( empty($result['no']) ){<BR> return true;<BR> }<BR> return false;<BR>}</P><P><br><br>/**<BR> * _getChar 通过ASC码返回字母或者数字<BR> *<BR> * @access private<BR> * @param string $ascii<BR> * @return string<BR> */<BR>private function _getChar( $ascii ){<BR> if ( $ascii >= 48 && $ascii <= 57 ) {<BR> return chr($ascii); //数字<BR> } elseif ( $ascii>=65 && $ascii<=90 ) {<BR> return chr($ascii); // A--Z<BR> } elseif ($ascii>=97 && $ascii<=122 ) {<BR> return chr($ascii-32); // a--z<BR> } else {<BR> return '~'; //其他<BR> }<BR>}</P><P><BR>/**<BR> * _search 查找需要的汉字内码(gb2312) 对应的拼音字符(二分法)<BR> *<BR> * @access private<BR> * @param int $code<BR> * @return int<BR> */<BR>private function _search( $code ) { <BR> $data = array_keys($this->_pinyins);</P><P><BR> $lower = 0;<BR> $upper = sizeof($data)-1;</P><P><BR> // 排除非一级汉字<BR> if ($code $data[23]) return -1;</P><P><BR> for (;;) { <BR> if ( $lower > $upper ){ <BR> return $data[$lower-1];<BR> }<BR> $middle = (int) round(($lower + $upper) / 2);<BR> if ( !isset($data[$middle]) ) { <BR> return -1;<BR> }</P><P><BR> if ( $data[$middle] < $code ){<BR> $lower = (int)$middle + 1;<BR> } else if ( $data[$middle] == $code ) { <BR> return $data[$middle];<BR> } else {<BR> $upper = (int)$middle - 1;<BR> }<BR> }// end for<BR>}</P><P>}
二、用来得到中文的首字母
这个是将中文转换为拼音的类:charset
<?php<BR>/**<BR> * 汉字转化为拼音,拼音转化为汉字<BR> * <BR> */</P><P>class charset<BR>{<BR> private $_code=array(<BR> array("a",'-20319'),<BR> array("ai",'-20317'),<BR> array("an",'-20304'),<BR> array("ang",'-20295'),<BR> array("ao",'-20292'),<BR> array("ba",'-20283'),<BR> array("bai",'-20265'),<BR> array("ban",'-20257'),<BR> array("bang",'-20242'),<BR> array("bao",'-20230'),<BR> array("bei",'-20051'),<BR> array("ben",'-20036'),<BR> array("beng",'-20032'),<BR> array("bi",'-20026'),<BR> array("bian",'-20002'),<BR> array("biao",'-19990'),<BR> array("bie",'-19986'),<BR> array("bin",'-19982'),<BR> array("bing",'-19976'),<BR> array("bo",'-19805'),<BR> array("bu",'-19784'),<BR> array("ca",'-19775'),<BR> array("cai",'-19774'),<BR> array("can",'-19763'),<BR> array("cang",'-19756'),<BR> array("cao",'-19751'),<BR> array("ce",'-19746'),<BR> array("ceng",'-19741'),<BR> array("cha",'-19739'),<BR> array("chai",'-19728'),<BR> array("chan",'-19725'),<BR> array("chang",'-19715'),<BR> array("chao",'-19540'),<BR> array("che",'-19531'),<BR> array("chen",'-19525'),<BR> array("cheng",'-19515'),<BR> array("chi",'-19500'),<BR> array("chong",'-19484'),<BR> array("chou",'-19479'),<BR> array("chu",'-19467'),<BR> array("chuai",'-19289'),<BR> array("chuan",'-19288'),<BR> array("chuang",'-19281'),<BR> array("chui",'-19275'),<BR> array("chun",'-19270'),<BR> array("chuo",'-19263'),<BR> array("ci",'-19261'),<BR> array("cong",'-19249'),<BR> array("cou",'-19243'),<BR> array("cu",'-19242'),<BR> array("cuan",'-19238'),<BR> array("cui",'-19235'),<BR> array("cun",'-19227'),<BR> array("cuo",'-19224'),<BR> array("da",'-19218'),<BR> array("dai",'-19212'),<BR> array("dan",'-19038'),<BR> array("dang",'-19023'),<BR> array("dao",'-19018'),<BR> array("de",'-19006'),<BR> array("deng",'-19003'),<BR> array("di",'-18996'),<BR> array("dian",'-18977'),<BR> array("diao",'-18961'),<BR> array("die",'-18952'),<BR> array("ding",'-18783'),<BR> array("diu",'-18774'),<BR> array("dong",'-18773'),<BR> array("dou",'-18763'),<BR> array("du",'-18756'),<BR> array("duan",'-18741'),<BR> array("dui",'-18735'),<BR> array("dun",'-18731'),<BR> array("duo",'-18722'),<BR> array("e",'-18710'),<BR> array("en",'-18697'),<BR> array("er",'-18696'),<BR> array("fa",'-18526'),<BR> array("fan",'-18518'),<BR> array("fang",'-18501'),<BR> array("fei",'-18490'),<BR> array("fen",'-18478'),<BR> array("feng",'-18463'),<BR> array("fo",'-18448'),<BR> array("fou",'-18447'),<BR> array("fu",'-18446'),<BR> array("ga",'-18239'),<BR> array("gai",'-18237'),<BR> array("gan",'-18231'),<BR> array("gang",'-18220'),<BR> array("gao",'-18211'),<BR> array("ge",'-18201'),<BR> array("gei",'-18184'),<BR> array("gen",'-18183'),<BR> array("geng",'-18181'),<BR> array("gong",'-18012'),<BR> array("gou",'-17997'),<BR> array("gu",'-17988'),<BR> array("gua",'-17970'),<BR> array("guai",'-17964'),<BR> array("guan",'-17961'),<BR> array("guang",'-17950'),<BR> array("gui",'-17947'),<BR> array("gun",'-17931'),<BR> array("guo",'-17928'),<BR> array("ha",'-17922'),<BR> array("hai",'-17759'),<BR> array("han",'-17752'),<BR> array("hang",'-17733'),<BR> array("hao",'-17730'),<BR> array("he",'-17721'),<BR> array("hei",'-17703'),<BR> array("hen",'-17701'),<BR> array("heng",'-17697'),<BR> array("hong",'-17692'),<BR> array("hou",'-17683'),<BR> array("hu",'-17676'),<BR> array("hua",'-17496'),<BR> array("huai",'-17487'),<BR> array("huan",'-17482'),<BR> array("huang",'-17468'),<BR> array("hui",'-17454'),<BR> array("hun",'-17433'),<BR> array("huo",'-17427'),<BR> array("ji",'-17417'),<BR> array("jia",'-17202'),<BR> array("jian",'-17185'),<BR> array("jiang",'-16983'),<BR> array("jiao",'-16970'),<BR> array("jie",'-16942'),<BR> array("jin",'-16915'),<BR> array("jing",'-16733'),<BR> array("jiong",'-16708'),<BR> array("jiu",'-16706'),<BR> array("ju",'-16689'),<BR> array("juan",'-16664'),<BR> array("jue",'-16657'),<BR> array("jun",'-16647'),<BR> array("ka",'-16474'),<BR> array("kai",'-16470'),<BR> array("kan",'-16465'),<BR> array("kang",'-16459'),<BR> array("kao",'-16452'),<BR> array("ke",'-16448'),<BR> array("ken",'-16433'),<BR> array("keng",'-16429'),<BR> array("kong",'-16427'),<BR> array("kou",'-16423'),<BR> array("ku",'-16419'),<BR> array("kua",'-16412'),<BR> array("kuai",'-16407'),<BR> array("kuan",'-16403'),<BR> array("kuang",'-16401'),<BR> array("kui",'-16393'),<BR> array("kun",'-16220'),<BR> array("kuo",'-16216'),<BR> array("la",'-16212'),<BR> array("lai",'-16205'),<BR> array("lan",'-16202'),<BR> array("lang",'-16187'),<BR> array("lao",'-16180'),<BR> array("le",'-16171'),<BR> array("lei",'-16169'),<BR> array("leng",'-16158'),<BR> array("li",'-16155'),<BR> array("lia",'-15959'),<BR> array("lian",'-15958'),<BR> array("liang",'-15944'),<BR> array("liao",'-15933'),<BR> array("lie",'-15920'),<BR> array("lin",'-15915'),<BR> array("ling",'-15903'),<BR> array("liu",'-15889'),<BR> array("long",'-15878'),<BR> array("lou",'-15707'),<BR> array("lu",'-15701'),<BR> array("lv",'-15681'),<BR> array("luan",'-15667'),<BR> array("lue",'-15661'),<BR> array("lun",'-15659'),<BR> array("luo",'-15652'),<BR> array("ma",'-15640'),<BR> array("mai",'-15631'),<BR> array("man",'-15625'),<BR> array("mang",'-15454'),<BR> array("mao",'-15448'),<BR> array("me",'-15436'),<BR> array("mei",'-15435'),<BR> array("men",'-15419'),<BR> array("meng",'-15416'),<BR> array("mi",'-15408'),<BR> array("mian",'-15394'),<BR> array("miao",'-15385'),<BR> array("mie",'-15377'),<BR> array("min",'-15375'),<BR> array("ming",'-15369'),<BR> array("miu",'-15363'),<BR> array("mo",'-15362'),<BR> array("mou",'-15183'),<BR> array("mu",'-15180'),<BR> array("na",'-15165'),<BR> array("nai",'-15158'),<BR> array("nan",'-15153'),<BR> array("nang",'-15150'),<BR> array("nao",'-15149'),<BR> array("ne",'-15144'),<BR> array("nei",'-15143'),<BR> array("nen",'-15141'),<BR> array("neng",'-15140'),<BR> array("ni",'-15139'),<BR> array("nian",'-15128'),<BR> array("niang",'-15121'),<BR> array("niao",'-15119'),<BR> array("nie",'-15117'),<BR> array("nin",'-15110'),<BR> array("ning",'-15109'),<BR> array("niu",'-14941'),<BR> array("nong",'-14937'),<BR> array("nu",'-14933'),<BR> array("nv",'-14930'),<BR> array("nuan",'-14929'),<BR> array("nue",'-14928'),<BR> array("nuo",'-14926'),<BR> array("o",'-14922'),<BR> array("ou",'-14921'),<BR> array("pa",'-14914'),<BR> array("pai",'-14908'),<BR> array("pan",'-14902'),<BR> array("pang",'-14894'),<BR> array("pao",'-14889'),<BR> array("pei",'-14882'),<BR> array("pen",'-14873'),<BR> array("peng",'-14871'),<BR> array("pi",'-14857'),<BR> array("pian",'-14678'),<BR> array("piao",'-14674'),<BR> array("pie",'-14670'),<BR> array("pin",'-14668'),<BR> array("ping",'-14663'),<BR> array("po",'-14654'),<BR> array("pu",'-14645'),<BR> array("qi",'-14630'),<BR> array("qia",'-14594'),<BR> array("qian",'-14429'),<BR> array("qiang",'-14407'),<BR> array("qiao",'-14399'),<BR> array("qie",'-14384'),<BR> array("qin",'-14379'),<BR> array("qing",'-14368'),<BR> array("qiong",'-14355'),<BR> array("qiu",'-14353'),<BR> array("qu",'-14345'),<BR> array("quan",'-14170'),<BR> array("que",'-14159'),<BR> array("qun",'-14151'),<BR> array("ran",'-14149'),<BR> array("rang",'-14145'),<BR> array("rao",'-14140'),<BR> array("re",'-14137'),<BR> array("ren",'-14135'),<BR> array("reng",'-14125'),<BR> array("ri",'-14123'),<BR> array("rong",'-14122'),<BR> array("rou",'-14112'),<BR> array("ru",'-14109'),<BR> array("ruan",'-14099'),<BR> array("rui",'-14097'),<BR> array("run",'-14094'),<BR> array("ruo",'-14092'),<BR> array("sa",'-14090'),<BR> array("sai",'-14087'),<BR> array("san",'-14083'),<BR> array("sang",'-13917'),<BR> array("sao",'-13914'),<BR> array("se",'-13910'),<BR> array("sen",'-13907'),<BR> array("seng",'-13906'),<BR> array("sha",'-13905'),<BR> array("shai",'-13896'),<BR> array("shan",'-13894'),<BR> array("shang",'-13878'),<BR> array("shao",'-13870'),<BR> array("she",'-13859'),<BR> array("shen",'-13847'),<BR> array("sheng",'-13831'),<BR> array("shi",'-13658'),<BR> array("shou",'-13611'),<BR> array("shu",'-13601'),<BR> array("shua",'-13406'),<BR> array("shuai",'-13404'),<BR> array("shuan",'-13400'),<BR> array("shuang",'-13398'),<BR> array("shui",'-13395'),<BR> array("shun",'-13391'),<BR> array("shuo",'-13387'),<BR> array("si",'-13383'),<BR> array("song",'-13367'),<BR> array("sou",'-13359'),<BR> array("su",'-13356'),<BR> array("suan",'-13343'),<BR> array("sui",'-13340'),<BR> array("sun",'-13329'),<BR> array("suo",'-13326'),<BR> array("ta",'-13318'),<BR> array("tai",'-13147'),<BR> array("tan",'-13138'),<BR> array("tang",'-13120'),<BR> array("tao",'-13107'),<BR> array("te",'-13096'),<BR> array("teng",'-13095'),<BR> array("ti",'-13091'),<BR> array("tian",'-13076'),<BR> array("tiao",'-13068'),<BR> array("tie",'-13063'),<BR> array("ting",'-13060'),<BR> array("tong",'-12888'),<BR> array("tou",'-12875'),<BR> array("tu",'-12871'),<BR> array("tuan",'-12860'),<BR> array("tui",'-12858'),<BR> array("tun",'-12852'),<BR> array("tuo",'-12849'),<BR> array("wa",'-12838'),<BR> array("wai",'-12831'),<BR> array("wan",'-12829'),<BR> array("wang",'-12812'),<BR> array("wei",'-12802'),<BR> array("wen",'-12607'),<BR> array("weng",'-12597'),<BR> array("wo",'-12594'),<BR> array("wu",'-12585'),<BR> array("xi",'-12556'),<BR> array("xia",'-12359'),<BR> array("xian",'-12346'),<BR> array("xiang",'-12320'),<BR> array("xiao",'-12300'),<BR> array("xie",'-12120'),<BR> array("xin",'-12099'),<BR> array("xing",'-12089'),<BR> array("xiong",'-12074'),<BR> array("xiu",'-12067'),<BR> array("xu",'-12058'),<BR> array("xuan",'-12039'),<BR> array("xue",'-11867'),<BR> array("xun",'-11861'),<BR> array("ya",'-11847'),<BR> array("yan",'-11831'),<BR> array("yang",'-11798'),<BR> array("yao",'-11781'),<BR> array("ye",'-11604'),<BR> array("yi",'-11589'),<BR> array("yin",'-11536'),<BR> array("ying",'-11358'),<BR> array("yo",'-11340'),<BR> array("yong",'-11339'),<BR> array("you",'-11324'),<BR> array("yu",'-11303'),<BR> array("yuan",'-11097'),<BR> array("yue",'-11077'),<BR> array("yun",'-11067'),<BR> array("za",'-11055'),<BR> array("zai",'-11052'),<BR> array("zan",'-11045'),<BR> array("zang",'-11041'),<BR> array("zao",'-11038'),<BR> array("ze",'-11024'),<BR> array("zei",'-11020'),<BR> array("zen",'-11019'),<BR> array("zeng",'-11018'),<BR> array("zha",'-11014'),<BR> array("zhai",'-10838'),<BR> array("zhan",'-10832'),<BR> array("zhang",'-10815'),<BR> array("zhao",'-10800'),<BR> array("zhe",'-10790'),<BR> array("zhen",'-10780'),<BR> array("zheng",'-10764'),<BR> array("zhi",'-10587'),<BR> array("zhong",'-10544'),<BR> array("zhou",'-10533'),<BR> array("zhu",'-10519'),<BR> array("zhua",'-10331'),<BR> array("zhuai",'-10329'),<BR> array("zhuan",'-10328'),<BR> array("zhuang",'-10322'),<BR> array("zhui",'-10315'),<BR> array("zhun",'-10309'),<BR> array("zhuo",'-10307'),<BR> array("zi",'-10296'),<BR> array("zong",'-10281'),<BR> array("zou",'-10274'),<BR> array("zu",'-10270'),<BR> array("zuan",'-10262'),<BR> array("zui",'-10260'),<BR> array("zun",'-10256'),<BR> array("zuo",'-10254')<BR> );<BR> //拼音转化函数<BR> function PinYin($str){<BR> $ret="";<BR> for($i=0;$i<strlen($str);$i++){<BR> $p=ord(substr($str,$i,1)); //查看ASCII码<BR> if($p>160){ //如果是中文,再多截取一个字符<BR> $q=ord(substr($str,++$i,1));<BR> $p=$p*256+$q-65536;<BR> }<BR> $ret.=$this->convert($p);<BR> }<BR> return $ret;<BR> }<br><br> //转化函数<BR> function convert($num){<BR> if($num>0&&$num<160){ //如果不是汉字,直接返回相对字符<BR> return chr($num);<BR> }elseif($num"-10247"){<BR> return "";<BR> }else{ //汉字,查找对应拼音<BR> for($i=count($this->_code)-1;$i>=0;$i--){<BR> if($this->_code[$i][1]<=$num)<BR> break;<BR> }<BR> return substr($this->_code[$i][0],0,1);<BR> }<BR> }<BR>}
下面这个是用来测试代码的:
<?php</P><P>include_once 'charset.class.php';<BR>header('Content-type: text/html;charset=utf-8');</P><P>$charset=new charset();<BR>foreach(array('武汉','中国','上海') as $val){<BR> echo iconv('gbk','utf-8//IGNORE',strtoupper($charset->PinYin(mb_convert_encoding($val,'gbk','utf-8'))));<BR> echo '<br />';<BR>}
三、这是网上找到个一个方法,经过测试可以正常使用,但对一些生僻字或者特殊字符会有问题.
function getFirstCharter($str){<BR> if(empty($str)){return '';}<BR> $fchar=ord($str{0});<BR> if($fchar>=ord('A')&&$fchar<=ord('z')) return strtoupper($str{0});<BR> $s1=iconv('UTF-8','gb2312',$str);<BR> $s2=iconv('gb2312','UTF-8',$s1);<BR> $s=$s2==$str?$s1:$str;<BR> $asc=ord($s{0})*256+ord($s{1})-65536;<BR> if($asc>=-20319&&$asc<=-20284) return 'A';<BR> if($asc>=-20283&&$asc<=-19776) return 'B';<BR> if($asc>=-19775&&$asc<=-19219) return 'C';<BR> if($asc>=-19218&&$asc<=-18711) return 'D';<BR> if($asc>=-18710&&$asc<=-18527) return 'E';<BR> if($asc>=-18526&&$asc<=-18240) return 'F';<BR> if($asc>=-18239&&$asc<=-17923) return 'G';<BR> if($asc>=-17922&&$asc<=-17418) return 'H';<BR> if($asc>=-17417&&$asc<=-16475) return 'J';<BR> if($asc>=-16474&&$asc<=-16213) return 'K';<BR> if($asc>=-16212&&$asc<=-15641) return 'L';<BR> if($asc>=-15640&&$asc<=-15166) return 'M';<BR> if($asc>=-15165&&$asc<=-14923) return 'N';<BR> if($asc>=-14922&&$asc<=-14915) return 'O';<BR> if($asc>=-14914&&$asc<=-14631) return 'P';<BR> if($asc>=-14630&&$asc<=-14150) return 'Q';<BR> if($asc>=-14149&&$asc<=-14091) return 'R';<BR> if($asc>=-14090&&$asc<=-13319) return 'S';<BR> if($asc>=-13318&&$asc<=-12839) return 'T';<BR> if($asc>=-12838&&$asc<=-12557) return 'W';<BR> if($asc>=-12556&&$asc<=-11848) return 'X';<BR> if($asc>=-11847&&$asc<=-11056) return 'Y';<BR> if($asc>=-11055&&$asc<=-10247) return 'Z';<BR> return null;</P><P>}