PHP 根据汉字拼音搜索是怎么做到的

PHP 根据汉字拼音搜索是怎么做到的,第1张

<php

function getfirstchar($s0){   //获取单个汉字拼音首字母。注意:此处不要纠结。汉字拼音是没有以U和V开头的

    $fchar = ord($s0{0});

    if($fchar >= ord("A") and $fchar <= ord("z") )return strtoupper($s0{0});

    $s1 = iconv("UTF-8","gb2312", $s0);

    $s2 = iconv("gb2312","UTF-8", $s1);

    if($s2 == $s0){$s = $s1;}else{$s = $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 "H";

    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;

    //return $s0;

}

function pinyin_long($zh){  //获取整条字符串汉字拼音首字母

    $ret = "";

    $s1 = iconv("UTF-8","gb2312", $zh);

    $s2 = iconv("gb2312","UTF-8", $s1);

    if($s2 == $zh){$zh = $s1;}

    for($i = 0; $i < strlen($zh); $i++){

        $s1 = substr($zh,$i,1);

        $p = ord($s1);

        if($p > 160){

            $s2 = substr($zh,$i++,2);

            $ret = getfirstchar($s2);

        }else{

            $ret = $s1;

        }

    }

    return $ret;

}

echo pinyin_long('《,@#$123HAHadf一年后');

>

本文实例讲述了php实现字符串首字母大写和单词首字母大写的方法。分享给大家供大家参考。具体分析如下:

ucfirst可以对字符串首字母进行大小,ucwords可以对字符串中每个单词的首字母大写输出

<php

print

ucfirst("hello

world");

print

ucwords("iam

king

of

the

jungle");

>

希望本文所述对大家的php程序设计有所帮助。

原始代码有些问题,我做了些更改,原地址github 的 chenall/chenall/blob/master/php/tools/ZH-cn_TO_pinyinphp

<php

/

    中文汉字转拼音首字母的PHP简易实现方法

    要求: 只能是GB2312码表里面中文字符

    转换得到字符串对应的拼音首字母大写

    用法:

    echo zh2py::conv('Chinese 中华人民共和国');//Chinese ZHRMGHG

    或

    $py = new zh2py;

    echo $py->conv('Chinese 中华人民共和国');//Chinese ZHRMGHG

/

class zh2py

{

    //根据汉字区位表

    //我们可以看到从16-55区之间是按拼音字母排序的,所以我们只需要判断某个汉字的区位码就可以得知它的拼音首字母

    //区位表第一部份,按拼音字母排序的

    //16区-55区

    /

        'A'=>0xB0A1, 'B'=>0xB0C5, 'C'=>0xB2C1, 'D'=>0xB4EE, 'E'=>0xB6EA, 'F'=>0xB7A2, 'G'=>0xB8C1,'H'=>0xB9FE,

    'J'=>0xBBF7, 'K'=>0xBFA6, 'L'=>0xC0AC, 'M'=>0xC2E8, 'N'=>0xC4C3, 'O'=>0xC5B6, 'P'=>0xC5BE,'Q'=>0xC6DA,

    'R'=>0xC8BB, 'S'=>0xC8F6, 'T'=>0xCBFA, 'W'=>0xCDDA, 'X'=>0xCEF4, 'Y'=>0xD1B9, 'Z'=>0xD4D1

    /

    private static $FirstTable = array(

    0xB0C5, 0xB2C1, 0xB4EE, 0xB6EA, 0xB7A2, 0xB8C1, 0xB9FE, 0xBBF7, 0xBFA6, 0xC0AC, 0xC2E8,

    0xC4C3, 0xC5B6, 0xC5BE, 0xC6DA, 0xC8BB, 0xC8F6, 0xCBFA, 0xCDDA, 0xCEF4, 0xD1B9, 0xD4D1,0xD7FA

    );

    private static $FirstLetter = "ABCDEFGHJKLMNOPQRSTWXYZ";

    //区位表第二部份,不规则的,下面的字母是每个区里面对应字的拼音首字母从网上查询整理出来的,可能会有部份错误

    //56区-87区

    private static $SecondTable = array(

        "CJWGNSPGCGNEGYPBTYYZDXYKYGTZJNMJQMBSGZSCYJSYYFPGKBZGYDYWJKGKLJSWKPJQHYJWRDZLSYMRYPYWWCCKZNKYYG",

        "TTNGJEYKKZYTCJNMCYLQLYPYSFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCKBPHFFSSTYBGMXLPBYLLBHLX",

        "SMZMYJHSOJNGHDZQYKLGJHSGQZHXQGKXZZWYSCSCJXYEYXADZPMDSSMZJZQJYZCJJFWQJBDZBXGZNZCPWHWXHQKMWFBPBY",

        "DTJZZKXHYLYGXFPTYJYYZPSZLFCHMQSHGMXXSXJYQDCSBBQBEFSJYHWWGZKPYLQBGLDLCDTNMAYDDKSSNGYCSGXLYZAYPN",

        "PTSDKDYLHGYMYLCXPYCJNDQJWXQXFYYFJLEJPZRXCCQWQQSBZKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMQJCJLY",

        "QGJMSHZKBSWYEMYLTXFSYDXWLYCJQXSJNQBSCTYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCL",

        "QKXLHXJRZJMFQHXHWYWSBHTRXXGLHQHFNMGYKLDYXZPYLGGSMTCFBAJJZYLJTYANJGBJPLQGSZYQYAXBKYSECJSZNSLYZH",

        "ZXLZCGHPXZHZNYTDSBCJKDLZAYFFYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCS",

        "YDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGAGHDAASHTCPLCPQYBSZMPJLPCJOQLCDHJJYSPRCHNWJNLHLYYQYYWZPTCZG",

        "WWMZFFJQQQQYXACLBHKDJXDGMMYDJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYDCFCXYHLXCHYZJQSQQAGMNYXPFRKSSBJLYXY",

        "SYGLNSCMHCWWMNZJJLXXHCHSYZSTTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLYXDCCWZOCWKCCSBNHCPDYZNFCYYTYCKX",

        "KYBSQKKYTQQXFCMCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQKZPQSQSCFYMMDMGBWHWLGSLLYSDLMLXPTHMJ",

        "HWLJZYHZJXKTXJLHXRSWLWZJCBXMHZQXSDZPSGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCL",

        "SLDCLRPBHZHXYYFHBMGDMYCNQQWLQHJJCYWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSLJHTZKZJECXJCJNMFBYCSFYWYB",

        "JZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNTXHPLQKZCZWALSBCZJXSYZGWK",

        "YPSGXFZFCDKHJGXTLQFSGDSLQWZKXTMHSBGZMJZRGLYJBPMLMSXLZJQQHZYJCZYDJWFMJKLDDPMJEGXYHYLXHLQYQHKYCW",

        "CJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLTCKLYRZZGQTTJHHHJLJAXFGFJZSLCFDQZ",

        "LCLGJDJZSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNW",

        "CZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJTFCJXDYGJQJJPMGWGJJJPKQSB",

        "GBMMCJSSCLPQPDXCDYYKYPCJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJYFYZDJCNMWESCYGLBTZZGMSS",

        "LLYXYSXXBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMCYHYWDBXBTLMSYYYFSXJCBDXXLHJHFSSXZQHFZMZCZTQCXZXRTT",

        "DJHNRYZQQMTQDMMGNYDXMJGDXCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGSQQDDJCMBKZFFXMKDMDSYYSZCMLJDSYN",

        "SPRSKMKMPCKLGTBQTFZSWTFGGLYPLLJZHGJJGYPZLTCSMCNBTJBQFKDHBYZGKPBBYMTDSSXTBNPDKLEYCJNYCDYKZTDHQH",

        "SYZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBBTMLYZXDXJPLDLPCQDHZYCBZSCZBZMSLJFLKR",

        "ZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLGNDJLSLYGKDZPZXJYYZLWCXSZFGWYYDLYHCLJS",

        "CMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJYYCNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPYXJCJLZCSHLTOLJNMDDDLNGKATHQH",

        "JHYKHEZNMSHRPHQQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMM",

        "MYXCTPSHCPTXXZZSMPHPSHMCLMLDQFYQXSZYJDJJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZKHHGFLBCSMDLDG",

        "DZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYG",

        "CTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPHJSGZ",

        "GSZZQLYLWTJPFSYASMCJBTZYYCWMYTZSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQFHBS",

        "AQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ",

        );

    public static function utf8_to_gbk($string)//编码转换,必须转换成GB2312字符,这里只是简单的判断并不是很准确,可以自己写一个

    {

    if (mb_check_encoding($string,'gb2312'))

        return $string;

    if (function_exists('iconv'))

        return iconv("utf-8","gb2312//IGNORE",$string);

    return mb_convert_encoding($string,'gb2312','utf-8'); 

    }

    public static function conv($str)

    {

    $str = self::utf8_to_gbk($str);

    $len = strlen($str);

    $newStr = '';

    for($i=0; $i<$len ; ++$i)

    {

        $H = ord($str[$i]);

        $L = ord($str[$i+1]);

        //字符集非法

        if ($H < 0xB0 ||  $L < 0xA1 || $H > 0xF7 || $L == 0xFF)

        {

        $newStr = $str[$i];

        continue;

        }

        if ($H < 0xD8)//($H >= 0xB0 && $H <=0xD7)//查询文字在一级汉字区(16-55)

        {

        $W = ($H << 8) | $L;

        foreach(self::$FirstTable as $key=>$value)

        {

            if ($W < $value)

            {

            $newStr = self::$FirstLetter[$key];

            break;

            }

        }

        }

        else// if (H >= 0xD8 && H <= 0xF7)//查询中文在二级汉字区(56-87)

        $newStr =self::$SecondTable[$H - 0xD8][$L-0xA1];

        ++$i;

    }

    return $newStr;

    }

}

echo zh2py::conv('妃');//F

以上就是关于PHP 根据汉字拼音搜索是怎么做到的全部的内容,包括:PHP 根据汉字拼音搜索是怎么做到的、php实现字符串首字母大写和单词首字母大写的方法、php 中文转拼音首字母问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9356991.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存