ホームページ >バックエンド開発 >PHPチュートリアル >php mysqlでutf8でエンコードされた中国語文字をピンインに変換します

php mysqlでutf8でエンコードされた中国語文字をピンインに変換します

WBOY
WBOYオリジナル
2016-07-25 08:53:431229ブラウズ
  1. require_once('pinyin_table.php');

  2. function get_pinyin_array($string)
  3. {
  4. global $pinyin_table;
  5. $flow = array();
  6. for ( $i=0;$i {
  7. if (ord($string[$i]) >= 0x81 and ord($string[$i]) {
  8. $h = ord($string[$i]);
  9. if (isset($string[$i+1]))
  10. {
  11. $i++;
  12. $l = ord($string[$i]) ;
  13. if (isset($pinyin_table[$h][$l]))
  14. {
  15. array_push($flow,$pinyin_table[$h][$l]);
  16. }
  17. else
  18. {
  19. array_push($flow, $h);
  20. array_push($flow,$l);
  21. }
  22. }
  23. else
  24. {
  25. array_push($flow,ord($string[$i]));
  26. }
  27. }
  28. else
  29. {
  30. array_push( $flow,ord($string[$i]));
  31. }
  32. }
  33. //print_r($flow);
  34. $pinyin = array();
  35. $pinyin[0] = '';
  36. for ( $i=0;$i {
  37. if (is_array($flow[$i]))
  38. {
  39. if (sizeof($flow[$i]) == 1)
  40. {
  41. foreach ($pinyin as $key => $value)
  42. {
  43. $pinyin[$key] .= $flow[$i][0];
  44. }
  45. }
  46. if (sizeof($flow[$i]) > 1)
  47. {
  48. $tmp1 = $pinyin;
  49. foreach ($pinyin as $key => $value)
  50. {
  51. $pinyin[$key] .= $flow[$i][0];
  52. }
  53. for ($j=1;$j< ;sizeof($flow[$i]);$j++)
  54. {
  55. $tmp2 = $tmp1;
  56. for ($k=0;$k {
  57. $tmp2[$ k] .= $flow[$i][$j];
  58. }
  59. array_splice($pinyin,sizeof($pinyin),0,$tmp2);
  60. }
  61. }
  62. }
  63. else
  64. {
  65. foreach ($pinyin) as $key => $value)
  66. {
  67. $pinyin[$key] .= chr($flow[$i]);
  68. }
  69. }
  70. }
  71. return $pinyin;
  72. }

  73. < ;p>function GetGB2312String($name)
  74. {
  75. $tostr = "";
  76. for($i=0;$i {
  77. $curbin = ord(substr($name) ,$i,1));
  78. if($curbin {
  79. $tostr .= substr($name,$i,1);
  80. }elseif($curbin < bindingc("11000000")){
  81. $str = substr($name,$i,1) ;
  82. $tostr .= "".ord($str).";";
  83. }elseif($curbin $str = substr($name,$i,2 );
  84. $tostr .= "".GetUnicodeChar($str).";";
  85. $i += 1;
  86. }elseif($curbin $str = substr ($name,$i,3);
  87. $gstr= iconv("UTF-8","GB2312",$str);
  88. if(!$gstr)
  89. {
  90. $tostr .= "".GetUnicodeChar ($str).";";
  91. }else{
  92. $tostr .= $gstr;
  93. }
  94. $i += 2;
  95. }elseif($curbin < bindingc("11111000")){
  96. $str = substr($name,$i,4);
  97. $tostr .= "".GetUnicodeChar($str).";";
  98. $i += 3;
  99. }elseif($curbin $str = substr($name,$i,5);
  100. $tostr .= "".GetUnicodeChar($str).";";
  101. $i += 4;
  102. }else{
  103. $str = substr($name,$i,6);
  104. $tostr .= "".GetUnicodeChar($str).";";
  105. $i += 5;
  106. }
  107. }
  108. return $tostr;
  109. }
  110. function GetUnicodeChar($str)
  111. {
  112. $temp = "";
  113. for($i=0;$i {
  114. $x = decbin(ord(substr($str,$i,1)));
  115. if($i == 0)
  116. {
  117. $s = strlen($str)+1;
  118. $temp .= substr($x ,$s,8-$s);
  119. }else{
  120. $temp .= substr($x,2,6);
  121. }
  122. }
  123. return binding($temp);
  124. }

  125. $db = mysql_connect("127.0.0.1:3307", "root","123");

  126. mysql_select_db("qq",$db );

  127. $result = mysql_query("set names utf8",$db);
  128. $result = mysql_query("select title,group_id from groups",$db);

  129. while ($ myrow = mysql_fetch_array($result)) {

  130. $text1="$myrow[0]";
  131. $text= GetGB2312String($text1);//获得GB2312编码串
  132. $flow = get_pinyin_array($text);//获得拼音
  133. $result2 = mysql_query("update groups set titlepinyin='$flow[0]' where group_id = $myrow[1]",$db);
  134. printf("%s
    %s
    ", $text1,$flow[0]);
  135. }
  136. ?>

复制代

表に一字段タイトルピンインを追加

  1. mysql>テーブルグループを追加する titlepinyin varchar(1000);
复制牌

rpc.php改

  1. $db = mysql_connect("127.0.0.1:3307", "root","123");
  2. if(!$db) {
  3. // 表示接続できない場合はエラーになります。
  4. echo 'エラー: データベースに接続できませんでした。';
  5. } else {
  6. // 投稿されたクエリ文字列はありますか?
  7. if(isset($_POST['queryString'])) {
  8. $queryString = $_POST['queryString'];
  9. $length=strlen($queryString);

  10. mysql_select_db("qq",$db);

  11. $result = mysql_query("セット名utf8");

  12. // 文字列の長さは 0 より大きいですか?

  13. if($length>0) { (程序员之家 bbs.it-home.org 编辑整理)
  14. $sql="";
  15. if(!ereg("^[ A-Za-z0-9_.-]+$",$queryString))//如果有汉字的话
  16. {$sql="グループからタイトルを選択 WHERE タイトル LIKE '$queryString%' LIMIT 10";
  17. }else{ //英文数字記号
  18. $sql="SELECT title FROM groups WHERE titlepinyin LIKE '$queryString%' LIMIT 10";
  19. }
  20. $query = mysql_query($sql);
  21. // クエリを実行します: LIKE '$ を使用しますqueryString%'
  22. if($query) {
  23. while ($myrow = mysql_fetch_array($query)) {
  24. // 結果をフォーマットします。
  25. を使用します。リストの場合は変更できます。
  26. // onClick 関数はテキストボックスに結果を入力します。
  27. echo '
  28. '.$myrow[0].'< ;/リ>';
  29. }
  30. } else {
  31. echo "エラー: クエリ $sql に問題がありました。";
  32. }
  33. } else {
  34. }
  35. } else {
  36. echo 'このスクリプトに直接アクセスすることはできません!';
  37. }
  38. }
  39. ?>

复制代


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