Unicode
<?php $arr=[ 'title' =>"天氣不錯abc", 'price'=>100 ]; $json = json_encode($arr); echo "$json"; 結果: (Unicode 編碼) {"title":"\u5929\u6c23\u4e0d\u932fabc","price":100}
<?php $str = '"\u5929\u6c23\u4e0d\u932fabc"'; #特別注意:字串前後要加上雙引號 " echo json_decode($str); 結果: 天氣不錯abc
UTF-8
<?php echo preg_replace_callback("/./", function($matched) { return '\x'.dechex(ord($matched[0])); }, '下大雨abc'); 結果: \xe4\xb8\x8b\xe5\xa4\xa7\xe9\x9b\xa8\x61\x62\x63 參考: https://stackoverflow.com/questions/7320516/how-to-convert-text-to-x-codes
<?php $str="\xe4\xb8\x8b\xe5\xa4\xa7\xe9\x9b\xa8\x61\x62\x63"; #注意: 字串前後是雙引號 echo $str; 結果: 下大雨abc
<?php $encoded = '\xe4\xb8\x8b\xe5\xa4\xa7\xe9\x9b\xa8\x61\x62\x63'; #注意: 字串前後是單引號 $hexadecimal = str_replace('\x', '', $encoded); echo hex2bin($hexadecimal); echo "\n"; echo pack('H*', $hexadecimal); printf('%s', "\xe7\x94\x9f\xe6\x97\xa5\xe5\x84\xaa\xe6\x83\xa0"); 結果: 下大雨abc 下大雨abc
<?php $str='下大雨abc'; echo urlencode($str); 結果: %E4%B8%8B%E5%A4%A7%E9%9B%A8abc =================== $str='%E4%B8%8B%E5%A4%A7%E9%9B%A8abc'; echo urldecode($str); 結果: 下大雨abc
一些 &# 開頭的編碼
主要用於 HTML 網頁中來顯示
例如 雨 = 雨
<?php //方法一 $str = '雨'; $str2 = base_convert(bin2hex(iconv('UTF-8', 'UCS-4', $str)), 16, 10); // 38632 echo $str2; 結果: 38632 //方法二 $str = '雨'; $str = base_convert(bin2hex(mb_convert_encoding($str, 'ucs-4', 'utf-8')), 16, 10); echo "$unicode_html\n"; ============== $str="雨"; echo mb_convert_encoding($str, 'UTF-8', 'HTML-ENTITIES'); 結果: 雨http://hinablue.blogspot.com/2008/01/php-tech-unicode-html-convert.html
參考:
Unicode 編碼轉換工具
[web] 瞭解網頁中看不懂的編碼:Unicode 在 JavaScript 中的使用
Unicode Character Table
這裡有列出/查詢所有 Unicode 的字集
每個軟體開發者都絕對一定要會的Unicode及字元集必備知識(沒有藉口!)
Unicode、UTF-8、UTF-16,終於懂了
Unicode 是一個符號集, 它只規定了每個符號的二進制值,但是符號具體如何存儲它並沒有規定
前面提到, Unicode 字符集的編碼範圍是 0x0000 - 0x10FFFF,因此需要 1 到 3 個字節來表示
那麼,對於三個字節的 Unicode 字符,計算機怎麼知道它表示的是一個字符而不是三個字符呢 ?
如果所有字符都用三個字節表示,那麼對於那些一個字節就能表示的字符來說,有兩個字節是無意義的,對於存儲來說,這是極大的浪費,假如 , 一個普通的文本, 大部分字符都只需一個字節就能表示,現在如果需要三個字節才能表示,文本的大小會大出三倍左右
因此,Unicode 出現了多種存儲方式,常見的有 UTF-8、UTF-16、UTF-32,它們分別用不同的二進制格式來表示 Unicode 字符
UTF-8、UTF-16、UTF-32 中的 "UTF" 是 "Unicode Transformation Format" 的縮寫,意思是 "Unicode 轉換格式",後面的數 字表明至少使用多少個比特位來存儲字符, 比如:UTF-8 最少需要 8 個比特位也就是一個字節來存儲,對應的, UTF-16 和 UTF-32 分別需要最少 2 個字節 和 4 個字節來存儲