ホームページ >バックエンド開発 >PHPチュートリアル >PHP 中国語文字からピンイン ソース コードへ (GB2312 クラス ライブラリ、約 6000 文字の中国語をサポート)

PHP 中国語文字からピンイン ソース コードへ (GB2312 クラス ライブラリ、約 6000 文字の中国語をサポート)

WBOY
WBOYオリジナル
2016-07-23 08:55:00980ブラウズ
クラスライブラリ、PHP


最近のプロジェクトでは、フロントエンドにデータを提供するための開発言語として PHP が使用され、文字でソートできるようにするために、このプロジェクトを使用してスクリプトを作成しました。中国語の文字をピンインに変換します。スクリプトとコメントは比較的単純です。ここでは詳しく説明しません。コードに直接進みましょう。

使用法:

$py = new Pinying();
    $all_py = $py->get_all_py("武国伟") //出力 ['wu','guo' , 'wei']、文字列を出力し、結合メソッド join('',$all_py) を呼び出します
  1. $first_py = $py->get_first_py($all_py);//wgw を出力します
  2. $first_letter = $py->gt; get_first_letter ($all_py);// コードをコピーして出力します


ソースコード:

  1. /**
  2. * +---------------------------------------------- --- -------
  3. * PHP は中国語の文字をピンインに変換します
  4. * +---------------------------- ----- --------------------
  5. * 使用法:
  6. * $py = new Pinying();
  7. * $all_py = $py->get_all_py ("武国伟" ); // ['wu','guo','wei'] を出力し、結合メソッド join('',$all_py) を呼び出します
  8. * $first_py = $py-> get_first_py($all_py); //出力 wgw
  9. * $first_letter = $py->get_first_letter($all_py);// 出力 w
  10. *
  11. * +-------------- ------ ----------------------------------
  12. */
  13. class Pinying
  14. {
  15. private $dict_list = array(
  16. 'a' => -20319, 'ai' => -20317, 'an' => -20304、'ang' => -20292、'ba' => -20265、'ban' = > -20257、'バン' => -20230、'ベン' => -20032、 'bi' =>、'bian' => -19990、'bin' => ; -19976、'bo' => -19784、'ca' => -19774、'can' => 'cang' => -19751、'ceg' => -19741、'chai' => ; -19728、'チャン' => -19715、'チェ' => -19525、'チェン' => -19515、'チ' => -19484、'チュウ' => -19467、'チュアイ' => -19289、'チュアン' => -19288、'チュアン' => -19275、'チュン' => -19270, '中央' => -19263, 'ci' => -19261, 'コング' => -19249, 'cou' => -19243, 'cu' => -19242, 'キュアン' => -19238, 'cui' => -19235, 'cun' => -19227, 'cuo' => -19224,
  17. 'da' => -19218, 'dai' => -19212, 'ダン' => -19038, 'ダン' => -19023, 'dao' => -19018, 'de' => -19006, 'デン' => -19003, 'di' => -18996, 'ディアン' => -18977, 'diao' => -18961、「死ぬ」=> -18952, 'ディン' => -18783, 'ディウ' => -18774, 'ドン' => -18773, 'ドゥ' => -18763, 'du' => -18756, 'ドゥアン' => -18741, 'dui' => -18735, 'dun' => -18731, 'デュオ' => -18722,
  18. 'e' => -18710, 'en' => -18697、'えー' => -18696,
  19. 'fa' => -18526, 'ファン' => -18518, '牙' => -18501, 'フェイ' => -18490, 'フェン' => -18478, 'feng' => -18463, 'fo' => -18448, 'fou' => -18447, 'fu' => -18446,
  20. 'が' => -18239, 'ガイ' => -18237, 'ガン' => -18231, 'ギャング' => -18220, 'ガオ' => -18211, 'ge' => -18201, '芸' => -18184, 'gen' => -18183, 'geng' => -18181, 'ゴング' => -18012, 'ごう' => -17997, 'グ' => -17988, 'グア' => -17970, 'グアイ' => -17964, 'グアン' => -17961, 'guang' => -17950, 'gui' => -17947,
  21. '銃' => -17931, '郭' => -17928,
  22. 'は' => -17922, 'ハイ' => -17759, 'ハン' => -17752, 'ハング' => -17733, 'ハオ' => -17730, '彼' => -17721, 'ヘイ' => -17703, 'ヘン' => -17701, 'heng' => -17697, 'ホン' => -17692, 'hou' => -17683, 'hu' => -17676, '華' => -17496, '淮' => -17487, 'フアン' => -17482, '黄' => -17468, 'フイ' => -17454,
  23. 'フン' => -17433, 'フオ' => -17427,
  24. 'ji' => -17417, 'jia' => -17202, 'ジャン' => -17185, '江' => -16983, 'jiao' => -16970, 'jie' => -16942, 'ジン' => -16915, 'jing' => -16733, 'ジオング' => -16708, 'jiu' => -16706, 'ju' => -16689, 'ジュアン' => -16664, 'ジュエ' => -16657, 'ジュン' => -16647,
  25. 'か' => -16474, 'kai' => -16470, 'カン' => -16465, 'カン' => -16459, '花王' => -16452, 'ケ' => -16448, 'ケン' => -16433, '坑' => -16429, 'コン' => -16427, 'コウ' => -16423, 'く' => -16419, 'クア' => -16412, 'クアイ' => -16407, 'クアン' => -16403, 'クアン' => -16401, 'クイ' => -16393, 'くん' => -16220, 'クオ' => -16216、
  26. 'ラ' => -16212, 'ライ' => -16205, 'lan' => -16202, 'lang' => -16187, 'ラオ' => -16180, 'le' => -16171, 'レイ' => -16169, '長さ' => -16158, 'li' => -16155, 'lia' => -15959, 'リアン' => -15958, '梁' => -15944, 'リャオ' => -15933, '嘘' => -15920, 'lin' => -15915, 'リング' => -15903, 'リュー' => -15889,
  27. '長い' => -15878, 'ルー' => -15707, 'lu' => -15701, 'lv' => -15681, 'ルアン' => -15667, 'ルー' => -15661, 'ルン' => -15659, '羅' => -15652,
  28. 'ma' => -15640, 'まい' => -15631, '男' => -15625, 'マン' => -15454, 'マオ' => -15448, '私' => -15436, 'メイ' => -15435, '男性' => -15419, '孟' => -15416, 'ミ' => -15408, 'ミアン' => -15394, 'ミャオ族' => -15385, '三重' => -15377, '分' => -15375, '明' => -15369, 'ミュウ' => -15363, 'も' => -15362, 'もう' => -15183, 'mu' => -15180,
  29. 'na' => -15165, 'ない' => -15158, 'ナン' => -15153, 'ナン' => -15150, 'nao' => -15149, 'ne' => -15144, 'ネイ' => -15143, 'ねん' => -15141, 'ネン' => -15140, 'に' => -15139, '年' => -15128, 'ニアン' => -15121, 'ニャオ' => -15119, 'nie' => -15117, 'ニン' => -15110, 'ニング' => -15109, 'ニウ' => -14941,
  30. 'ノン' => -14937, 'nu' => -14933, 'nv' => -14930, 'ヌアン' => -14929, '鵺' => -14928, 'nuo' => -14926,
  31. 'o' => -14922, 'ou' => -14921,
  32. 'pa' => -14914, 'パイ' => -14908, 'パン' => -14902, 'パン' => -14894, 'パオ' => -14889, 'ペイ' => -14882, 'ペン' => -14873, 'ペン' => -14871, 'pi' => -14857, 'ピアン' => -14678, 'ピャオ' => -14674, 'パイ' => -14670, 'ピン' => -14668, 'ping' => -14663, 'po' => -14654, 'pu' => -14645,
  33. '気' => -14630, 'qia' => -14594, '銭' => -14429, '強' => -14407, '喬' => -14399, 'qie' => -14384, '秦' => -14379, '清' => -14368, 'qiong' => -14355, 'qiu' => -14353, 'qu' => -14345, 'quan' => -14170, 'que' => -14159, 'qun' => -14151,
  34. 'ラン' => -14149, '鳴った' => -14145, 'ラオ' => -14140, 're' => -14137, 'レン' => -14135, 'reng' => -14125, 'ri' => -14123, 'ロン' => -14122, 'ルー' => -14112, 'ru' => -14109, 'ルアン' => -14099, 'ルイ' => -14097, '実行' => -14094, 'ルオ' => -14092,
  35. 'さ' => -14090, 'サイ' => -14087, 'さん' => -14083, '歌った' => -13917, 'sao' => -13914, 'se' => -13910, 'セン' => -13907, 'seng' => -13906, 'シャ' => -13905, 'シャイ' => -13896, 'シャン' => -13894, 'シャン' => -13878, 'シャオ' => -13870, '彼女' => -13859, 'シェン' => -13847, '盛' => -13831, 'し' => -13658, 'ショウ' => -13611, 'シュウ' => -13601, 'シュア' => -13406, 'シュアイ' => -13404, 'シュアン' => -13400, 'シュアン' => -13398, '水' => -13395, 'シュン' => -13391, 'シュオ' => -13387, 'si' => -13383, '歌' => -13367, 'そう' => -13359, 'す' => -13356, 'スアン' => -13343, 'スイ' => -13340, '太陽' => -13329, 'suo' => -13326,
  36. 'ta' => -13318, 'tai' => -13147, 'タン' => -13138, 'タン' => -13120, 'タオ' => -13107, 'て' => -13096, 'テン' => -13095, 'ti' => -13091, 'ティアン' => -13076, 'ティアオ' => -13068, 'ネクタイ' => -13063, 'ting' => -13060, 'トン' => -12888, 'トウ' => -12875, 'tu' => -12871, 'トゥアン' => -12860, 'トゥイ' => -12858, 'tun' => -12852, 'tuo' => -12849,
  37. 'わ' => -12838, 'ワイ' => -12831, 'ワン' => -12829, '王' => -12812, 'ウェイ' => -12802, 'ウェン' => -12607, 'ウェン' => -12597, 'を' => -12594, 'ウー' => -12585,
  38. 'xi' => -12556, 'xia' => -12359, '西安' => -12346, 'シアン' => -12320, 'シャオ' => -12300, 'xie' => -12120, 'xin' => -12099, 'xing' => -12089, 'xiong' => -12074, 'xiu' => -12067, 'xu' => -12058, '玄' => -12039, 'xue' => -11867, 'xun' => -11861、
  39. 'ya' => -11847、'yan' => -11798、'ye' => -11604 ; -11589、'陰' => -11358、'陽' => -11324、'ユ' => -11097、'ユン' => -11067、'ザ' => -11055 ; -11052、'ザン' => -11041、'ゼ' => -11020、'ゼン' => -11018、'ザ' => -10838、'ザン' => -10815、'zhao' => -10790、'zheng' => -10764、'zhi' => ' => -10544、'周' => -10519、'珠' => -10329、'周' => - 10328 、'zhuang' => -10315、'zhun' => -10307、'zi' => -10296 ' => -10281、'ぞう' => -10270、'ずい' => -10260、'ずん' => - 10256, 'zuo' => -10254
  40. );
  41. /**
  42. * すべてのピンインを取得し、'Zhang Sanfeng' ==> ['zhang','san','feng'] などのピンインの配列を返します
  43. * @param $chinese
  44. * @param string $charset
  45. * @戻り配列
  46. */
  47. public function get_all_py($chinese, $charset = 'utf-8')
  48. {
  49. if ($charset ! = 'gb2312') $chinese = $this->_U2_Utf8_Gb($chinese);
  50. $py = $this->zh_to_pys($chinese);
  51. return $py;
  52. }
  53. /**
  54. * ['zhang','san','feng'] などのピンインの最初の文字を取得します ==> zsf
  55. * @param $all_pys
  56. * @return string
  57. * /
  58. public function get_first_py($all_pys)
  59. {
  60. if (count($all_pys) <= 0) {
  61. return '';
  62. }
  63. $result = [];
  64. foreach ($all_pys as $one) {
  65. if (is_null($one) || strlen($one) <= 0) {
  66. continue;
  67. }
  68. $result[] = substr($one, 0, 1);
  69. }
  70. return join( ' ', $result);
  71. }
  72. /**
  73. * ['zhang','san','feng'] などのピンインの最初の文字を取得します ==> z
  74. * @param $all_pys
  75. * @return string
  76. */
  77. public function get_first_letter($all_pys)
  78. {
  79. if (count($all_pys) <= 0) {
  80. return '';
  81. }
  82. foreach ($all_pys as $one) {
  83. if (is_null($one) || strlen($one) <= 0) {
  84. continue;
  85. }
  86. return substr($one, 0, 1);
  87. }
  88. return '';
  89. }
  90. プライベート関数 _U2_Utf8_Gb($_C)
  91. {
  92. $_String = '';
  93. if ($_C < 0x80) $_String .= $_C;
  94. elseif ($_C < 0x800 ) {
  95. $_String .= chr(0xC0 | $_C >> 6);
  96. $_String .= chr(0x80 | $_C & 0x3F);
  97. } elseif ($_C $_String . = chr(0xE0 | $_C >> 12);
  98. $_String .= chr(0x80 | $_C >> 6 & 0x3F);
  99. $_String .= chr(0x80 | $_C & 0x3F);
  100. } elseif ($_C $_String .= chr(0xF0 | $_C >> 18);
  101. $_String .= chr(0x80 | $_C >> 12 & 0x3F);
  102. $ _String .= chr(0x80 | $_C >> 6 & 0x3F);
  103. $_String .= chr(0x80 | $_C & 0x3F);
  104. }
  105. return iconv('UTF-8', 'GB2312', $ _String);
  106. }
  107. プライベート関数zh_to_py($num, $blank = '')
  108. {
  109. if ($num > 0 && $num return chr($num);
  110. } elseif ( $num < -20319 || $num > -10247) {
  111. return $blank;
  112. } else {
  113. foreach ($this->dict_list as $py => $code) {
  114. if ($code) > ; $num) Break;
  115. $result = $py;
  116. }
  117. return $result;
  118. }
  119. }
  120. プライベート関数 zh_to_pys($chinese)
  121. {
  122. $result = array();
  123. for ($i = 0 ; $i $p = ord(substr($chinese, $i, 1));
  124. if ($p > 160) {
  125. $q = ord( substr ($chinese, ++$i, 1));
  126. $p = $p * 256 + $q - 65536;
  127. }
  128. $result[] = $this->zh_to_py($p);
  129. }
  130. return $result;
  131. }
  132. }
コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。