[精讚] [會員登入]
3494

[PHP] 將UTF8中文字轉成10進位或16進位數值

原本為了處理 preg_match 中文字的問題[2],用php把中文字轉換成10進位和6進位的數值編碼

分享此文連結 //n.sfs.tw/10671

分享連結 [PHP] 將UTF8中文字轉成10進位或16進位數值@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 08:15:51 最後編修
2017-01-24 02:06:21 By 張○○
 

自動目錄

為了處理 preg_match 中文字的問題[2],想把中文字轉換成16進位的編碼,如「一」是0xe4b880,好讓程式取用,網路上找不到適合的,有發現HTML用的UNICODE[1],不符需要只好自己來寫。

$str="一籲乂龘";
mb_internal_encoding("UTF-8");
$mlen = mb_strlen($str);
 
for($ii=0;$ii<$mlen; $ii++){
  $w= mb_substr($str,$ii,1);
  $len= strlen( $w);
  print $w .": ";
  for($jj=0;$jj<$len; $jj++){
    print ord( substr($w,$jj,1)). " ";
    $r[$jj]=  dechex( ord( substr($w,$jj,1)));
  }
  print implode($r). "\n";
}

原本想用第一碼來判斷一個中文字的BYTES數[2],後來改用mb_的函數來解決,算是偷懶的作法。

第一碼>=192開頭是2字節
110xxxxx xxxxxxxx
第一碼>=224開頭是3字節
1110xxxx xxxxxxxx xxxxxxxx
第一碼>=240開頭是4字節
11110xxx xxxxxxxx xxxxxxxx xxxxxxxx

執行結果

一: 228 184 128 e4b880
籲: 231 177 178 e7b1b2
乂: 228 185 130 e4b982
龘: 233 190 152 e9be98

如果有字碼該如何印出來,直接把16進位值合裡來放到字串就可以了[3]

echo "\xe6\x88\x91";   //我

或是

echo chr(228).chr(184).chr(128); //一

這轉換最後沒能解決我一開始要處理的中文字字串比對的問題,算有點徒勞,不過也許有人會有需要。

 

判斷中文字?

判斷是否為中文字,只有檢查第一碼是不是>224是不夠的,因為224~240這個區段包含了中文、日文、韓文、一堆符號。

有一些我研究的結果可供參考[4]:

部首

226,188,128=> ⼀
226,191,149=> ⿕

主字群+拓展

227,144,128=> 㐀
233,190,187=> 龻

unicode 兼容漢字

239,164,128=> 豈
239,169,170=> 頻

 

 

參考資料

[1] 中文字轉 HTML UNICODE http://www.csie.ntu.edu.tw/~piaip/unihtml/

[2] 正則匹配中文汉字 http://www.5idev.com/p-php_preg_match.shtml 此例無效

[3] http://www.ptt.cc/bbs/PHP/M.1221550095.A.C82.html

[4] https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php


原文 2013-09-23 15:28:25

END

你可能感興趣的文章

[PHP] 使用FTP PHP 上使用 FTP 的寫法

PHP判斷對方瀏覽器語系 多語系的網頁應該主動偵查瀏覽器的語系,配合使用者跳出合適的語系。

[PHP+ci4] codeignitor4 Cache 及 Session 使用 memcached php 的framework codeignitor4 中的cache和session使用memcached

[PHP] 檢查檔案是否是圖檔 使用getimagesize函數檢查檔案是否是圖檔

[PHP] 使用browscap檢查瀏覽器版本 使用PHP內建函數browscap檢查瀏覽器版本

[PHP] 取得檔名和路徑:basename, dirname 由絕對路徑取的路徑及檔名的方法

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

為什麼要買長達二十年的保單? 為什麼要買長達二十年的保單?找一個可以說服我買二十年保單的理由。

[HP DL380G7] 生效啟動第3,4片網卡/開啟或關閉內建的網卡 HP DL380G7 預設第3,4片網卡裝完系統後找不到,難道是壞了?要怎麼辦?

安裝SPHINX支援中文 新版本的 sphinx 和舊版不同,網路上很多範例和教學是不能用的。此文是安裝和設定方法分享

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

[Win7] 燒錄 iso 檔 在Windows7 中內建燒錄程式,可以直接把檔案拉到光碟機裡,再執行燒錄。