当前位置 博文首页 > PHP基于自定义函数实现的汉字转拼音功能实例

    PHP基于自定义函数实现的汉字转拼音功能实例

    作者:崇拜飞哥 时间:2021-08-24 18:48

    本文实例讲述了PHP基于自定义函数实现的汉字转拼音功能。分享给大家供大家参考,具体如下:

    整个过程用到了pinyin.table文件。

    pinyin.php

    <?php
     header("Content-Type:text/html;charset=utf-8");
     $letters = "";
     if ($_GET) {
     $cat_name = $_GET["cat_name"];
     $catname = convert($cat_name);
     $letters = get_letter($catname, false);
     }
     function get_letter($catname, $letter = true) {
     return $letter ? strtolower(substr(gb2py($catname), 0, 1)) : str_replace(' ', '', gb2py($catname));
     }
     function gb2py($text, $exp = '') {
     if(!$text) return '';
     $data = array();
     $tmp = @file('pinyin.table'); // 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。
     if(!$tmp) return '';
     $tmps = count($tmp);
     for($i = 0; $i < $tmps; $i++) {
      $tmp1 = explode(" ", $tmp[$i]);
      $data[$i]=array($tmp1[0], $tmp1[1]);
     }
     $r = array();
     $k = 0;
     $textlen = strlen($text);
     for($i = 0; $i < $textlen; $i++) {
      $p = ord(substr($text, $i, 1));
      if($p > 160) {
      $q = ord(substr($text, ++$i, 1));
      $p = $p*256+$q-65536;
      }
      if($p > 0 && $p < 160) {
      $r[$k] = chr($p);
      } elseif($p< -20319 || $p > -10247) {
      $r[$k] = '';
      } else {
      for($j = $tmps-1; $j >= 0; $j--) {
       if($data[$j][1]<=$p) break;
      }
      $r[$k] = $data[$j][0];
      }
      $k++;
     }
     return implode($exp, $r);
     }
     function convert($str, $from = 'utf-8', $to = 'gb2312') {
     if(!$str) return '';
     $from = strtolower($from);
     $to = strtolower($to);
     if($from == $to) return $str;
     $from = str_replace('gbk', 'gb2312', $from);
     $to = str_replace('gbk', 'gb2312', $to);
     $from = str_replace('utf8', 'utf-8', $from);
     $to = str_replace('utf8', 'utf-8', $to);
     if($from == $to) return $str;
     $tmp = array();
     if(function_exists('iconv')) {
      if(is_array($str)) {
      foreach($str as $key => $val) {
       $tmp[$key] = iconv($from, $to."//IGNORE", $val);
      }
      return $tmp;
      } else {
      return iconv($from, $to."//IGNORE", $str);
      }
     } else if(function_exists('mb_convert_encoding')) {
      if(is_array($str)) {
      foreach($str as $key => $val) {
       $tmp[$key] = mb_convert_encoding($val, $to, $from);
      }
      return $tmp;
      } else {
      return mb_convert_encoding($str, $to, $from);
      }
     } else {
      require_once 'convert.func.php';
      return dconvert($str, $to, $from);
     }
     }
    ?>
    <form action="./" method="get">
     <input type="text" name="cat_name" value="<?php echo $cat_name?>" />
     <input type="submit" value="提交" /><br />
    </form>
    <?php
     echo $letters;
    ?>
    
    

    pinyin.table

    a -20319
    ai -20317
    an -20304
    ang -20295
    ao -20292
    ba -20283
    bai -20265
    ban -20257
    bang -20242
    bao -20230
    bei -20051
    ben -20036
    beng -20032
    bi -20026
    bian -20002
    biao -19990
    bie -19986
    bin -19982
    bing -19976
    bo -19805
    bu -19784
    ca -19775
    cai -19774
    can -19763
    cang -19756
    cao -19751
    ce -19746
    ceng -19741
    cha -19739
    chai -19728
    chan -19725
    chang -19715
    chao -19540
    che -19531
    chen -19525
    cheng -19515
    chi -19500
    chong -19484
    chou -19479
    chu -19467
    chuai -19289
    chuan -19288
    chuang -19281
    chui -19275
    chun -19270
    chuo -19263
    ci -19261
    cong -19249
    cou -19243
    cu -19242
    cuan -19238
    cui -19235
    cun -19227
    cuo -19224
    da -19218
    dai -19212
    dan -19038
    dang -19023
    dao -19018
    de -19006
    deng -19003
    di -18996
    dian -18977
    diao -18961
    die -18952
    ding -18783
    diu -18774
    dong -18773
    dou -18763
    du -18756
    duan -18741
    dui -18735
    dun -18731
    duo -18722
    e -18710
    en -18697
    er -18696
    fa -18526
    fan -18518
    fang -18501
    fei -18490
    fen -18478
    feng -18463
    fo -18448
    fou -18447
    fu -18446
    ga -18239
    gai -18237
    gan -18231
    gang -18220
    gao -18211
    ge -18201
    gei -18184
    gen -18183
    geng -18181
    gong -18012
    gou -17997
    gu -17988
    gua -17970
    guai -17964
    guan -17961
    guang -17950
    gui -17947
    gun -17931
    guo -17928
    ha -17922
    hai -17759
    han -17752
    hang -17733
    hao -17730
    he -17721
    hei -17703
    hen -17701
    heng -17697
    hong -17692
    hou -17683
    hu -17676
    hua -17496
    huai -17487
    huan -17482
    huang -17468
    hui -17454
    hun -17433
    huo -17427
    ji -17417
    jia -17202
    jian -17185
    jiang -16983
    jiao -16970
    jie -16942
    jin -16915
    jing -16733
    jiong -16708
    jiu -16706
    ju -16689
    juan -16664
    jue -16657
    jun -16647
    ka -16474
    kai -16470
    kan -16465
    kang -16459
    kao -16452
    ke -16448
    ken -16433
    keng -16429
    kong -16427
    kou -16423
    ku -16419
    kua -16412
    kuai -16407
    kuan -16403
    kuang -16401
    kui -16393
    kun -16220
    kuo -16216
    la -16212
    lai -16205
    lan -16202
    lang -16187
    lao -16180
    le -16171
    lei -16169
    leng -16158
    li -16155
    lia -15959
    lian -15958
    liang -15944
    liao -15933
    lie -15920
    lin -15915
    ling -15903
    liu -15889
    long -15878
    lou -15707
    lu -15701
    lv -15681
    luan -15667
    lue -15661
    lun -15659
    luo -15652
    ma -15640
    mai -15631
    man -15625
    mang -15454
    mao -15448
    me -15436
    mei -15435
    men -15419
    meng -15416
    mi -15408
    mian -15394
    miao -15385
    mie -15377
    min -15375
    ming -15369
    miu -15363
    mo -15362
    mou -15183
    mu -15180
    na -15165
    nai -15158
    nan -15153
    nang -15150
    nao -15149
    ne -15144
    nei -15143
    nen -15141
    neng -15140
    ni -15139
    nian -15128
    niang -15121
    niao -15119
    nie -15117
    nin -15110
    ning -15109
    niu -14941
    nong -14937
    nu -14933
    nv -14930
    nuan -14929
    nue -14928
    nuo -14926
    o -14922
    ou -14921
    pa -14914
    pai -14908
    pan -14902
    pang -14894
    pao -14889
    pei -14882
    pen -14873
    peng -14871
    pi -14857
    pian -14678
    piao -14674
    pie -14670
    pin -14668
    ping -14663
    po -14654
    pu -14645
    qi -14630
    qia -14594
    qian -14429
    qiang -14407
    qiao -14399
    qie -14384
    qin -14379
    qing -14368
    qiong -14355
    qiu -14353
    qu -14345
    quan -14170
    que -14159
    qun -14151
    ran -14149
    rang -14145
    rao -14140
    re -14137
    ren -14135
    reng -14125
    ri -14123
    rong -14122
    rou -14112
    ru -14109
    ruan -14099
    rui -14097
    run -14094
    ruo -14092
    sa -14090
    sai -14087
    san -14083
    sang -13917
    sao -13914
    se -13910
    sen -13907
    seng -13906
    sha -13905
    shai -13896
    shan -13894
    shang -13878
    shao -13870
    she -13859
    shen -13847
    sheng -13831
    shi -13658
    shou -13611
    shu -13601
    shua -13406
    shuai -13404
    shuan -13400
    shuang -13398
    shui -13395
    shun -13391
    shuo -13387
    si -13383
    song -13367
    sou -13359
    su -13356
    suan -13343
    sui -13340
    sun -13329
    suo -13326
    ta -13318
    tai -13147
    tan -13138
    tang -13120
    tao -13107
    te -13096
    teng -13095
    ti -13091
    tian -13076
    tiao -13068
    tie -13063
    ting -13060
    tong -12888
    tou -12875
    tu -12871
    tuan -12860
    tui -12858
    tun -12852
    tuo -12849
    wa -12838
    wai -12831
    wan -12829
    wang -12812
    wei -12802
    wen -12607
    weng -12597
    wo -12594
    wu -12585
    xi -12556
    xia -12359
    xian -12346
    xiang -12320
    xiao -12300
    xie -12120
    xin -12099
    xing -12089
    xiong -12074
    xiu -12067
    xu -12058
    xuan -12039
    xue -11867
    xun -11861
    ya -11847
    yan -11831
    yang -11798
    yao -11781
    ye -11604
    yi -11589
    yin -11536
    ying -11358
    yo -11340
    yong -11339
    you -11324
    yu -11303
    yuan -11097
    yue -11077
    yun -11067
    za -11055
    zai -11052
    zan -11045
    zang -11041
    zao -11038
    ze -11024
    zei -11020
    zen -11019
    zeng -11018
    zha -11014
    zhai -10838
    zhan -10832
    zhang -10815
    zhao -10800
    zhe -10790
    zhen -10780
    zheng -10764
    zhi -10587
    zhong -10544
    zhou -10533
    zhu -10519
    zhua -10331
    zhuai -10329
    zhuan -10328
    zhuang -10322
    zhui -10315
    zhun -10309
    zhuo -10307
    zi -10296
    zong -10281
    zou -10274
    zu -10270
    zuan -10262
    zui -10260
    zun -10256
    zuo -10254
    
    

    备注:新建text文件复制下面代码到文件,重命名文件名pinyin.table

    PS:这里再为大家提供几款本站拼音与字母相关工具供大家参考:

    在线中英文根据首字母排序工具:
    http://tools.jb51.net/aideddesign/zh_paixu

    在线汉字转换成拼音工具:
    http://tools.jb51.net/transcoding/pinyin

    在线中文汉字转拼音工具:
    http://tools.jb51.net/transcoding/hanzi2pinyin

    在线中文汉字拼音对照转换工具:
    http://tools.jb51.net/transcoding/zh_pinyin

    在线字母大小写转换工具:
    http://tools.jb51.net/transcoding/upper

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP编码与转码操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php常用函数与技巧总结》及《PHP错误与异常处理方法总结》

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

    jsjbwy