談談php中的unicode和utf8編碼
本文給大家深入討論了unicode和utf8這兩種編碼的關係,理解好了會發現網上一些舊的東西,是嚴重多餘兼過期的,因為從utf-8流行開始到現在,早已經由原來六字節可變編碼到實際完全居於unicode(UCS-2)的穩定階段。
重新認識unicode和utf8編碼
直到今天,準確的説是剛才,我才知道UTF-8編碼和Unicode編碼是不一樣的,是有區別的囧
他們之間是有一定的聯繫的,看看他們的區別:
UTF-8的長度是不一定的,有可能是1、2、3字節
Unicode長度一定,2個字節(USC-2)
UTF-8可以和Unicode互相轉換
unicode和utf8的關係
Unicode(16進制)
UTF-8(二進制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
上面的表格有2個意思,第一個顯而易見就是説Unicode和UTF-8字符範圍的對應,還有一個可以看出Unicode怎麼和UTF-8互相轉換:
先説UTF-8到Unicode的轉換
UTF-8編碼的二進制和上面的3種格式進行匹配,匹配到之後去掉固定位(表格中的非x位置),然後從右到左每8位一組,不夠8位左邊不領,湊夠2個字節16 bits,這16 bits所表示的就是UTF-8對應的Unicode編碼,看看下面幾個例子:
上面圖片中的文字編碼格式為UTF-8,可以用WinHex看到其16進製表示
複製代碼 代碼如下:
字符 => UTF-8 => UTF-8二進制=> 去掉固定位置湊夠16位的二進制 => 16進制
漢 => E6B189 => 11100110 10110001 10001001 => 01101100 01001001 => 6C49
字 => E5AD97 => 11100101 10101101 10010111 => 01011011 01010111 => 5B57
#下面是在chrome命令行下面運行的結果
'u6C49'
"漢"
'u5B57'
"字"
#到這裏的'話,從UTF-8轉換到Unicode已經是一件非常容易的事了,看看轉換的偽代碼
讀取一個字節,11100110
判斷該UTF-8字符的格式,屬於第三種,3個字節
繼續讀取2個字節得到 11100101 10101101 10010111
按照格式去掉固定位 1011011 01010111
不夠16位,左邊補零 01011011 01010111 => 5B57
再看看從Unicode到UTF-8的轉換
複製代碼 代碼如下:
5B57
獲取5B57所在的Unicode範圍,0800 <= 5B57 <= FFFF,得知5B57的UTF-8有三個字節,形式為1110xxxx 10xxxxxx 10xxxxxx
獲取5B57的二進制編碼 101101101010111
用上一步驟的二進制編碼從右至左拼接UTF-8編碼 11100101 10101101 10010111
説説問題
再説説今天這個問題的起因,從前端輸入很多單詞,UTF-8格式每個詞最多30個字節,因此會在前端和後台分別做驗證,javascript用的是Unicode編碼,後端程序用的是UTF-8編碼,現在的解決辦法是這樣
前端
?
1
2
3
4
-
PHP正則匹配中文字母數字正則的表達式
PHP語言是一門實用性很強的語言,下面小編為大家帶來了關於PHP正則匹配中文字母數字正則的'表達式,歡迎大家閲讀!PHP正則匹配中文字母數字正則的表達式代碼如下if(preg_match("/^d*$/","4312")){echo"全數字";}if(preg_match("/^[a-z]*$/i","fdsFDfd")){echo"全...
-
如何寫出優雅的PHP代碼
導語:PHP是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。下面我們來看看如何寫出優雅的PHP代碼,希望對大家有所幫助。寫出優秀的程序代碼是一門藝術,要想如此,就必須在一開始就養成良好的編程習慣。良好的編程...
-
php使用fgetcsv讀取csv文件出現亂碼的解決方法
PHP獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。以下是小編為大家搜索整理的php使用fgetcsv讀取csv文件出現亂碼的解決方法,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!一般來説在php中...
-
PHP 7.1中都有哪些重大更新
PHP7.1.0帶來了大量的改進和新功能:可空類型返回空類型可迭代的psuedo-type支持常量可見的類數組解構square框架和在list()中允許指定keys多異常類型捕獲,以下是小編為大家搜索整理的PHP7.1中都有哪些重大更新,希望能給大家帶來幫助!更多精彩內容請及時關注我們應...
相關文章
- Zend studio for eclipse中使php可以調用mysql相關函數的設置方
- php實現utf-8轉unicode函數分享
- Efforts Urged to Improve Womens Reproductive Health英語閲讀
- 九年級《unit 6 I like music that I can dance to. Period2》評課稿
- PHP如何實現Unicode和Utf-8編碼相互轉換
- 淺析PHP中的UNICODE編碼與解碼
- 淺談php中curl和fsockopen的應用
- 八年級《unit8 Why don’t you get her a scarf? Period1》評課稿
- PEP六年級上冊《Unit1Howdoyougotoschool》知識點歸納
- 高中英語作文:My approach to difficulties in learning