utf-8 - php中的字元編碼

來源:互聯網
上載者:User
$str1 = "\xe4\xb8\xad";$str2 = '\xe4\xb8\xad';$str3 = '中';

能否詳細解釋一下三者的區別,是否可以相互轉化

回複內容:

$str1 = "\xe4\xb8\xad";$str2 = '\xe4\xb8\xad';$str3 = '中';

能否詳細解釋一下三者的區別,是否可以相互轉化

第一次在segmentfault上回答問題。。

PHP字串變數,雙引號和單引號的意義是不同的

使用雙引號時會轉義 單引號時不轉義
使用雙引號時,$xxxx文本會被相應變數的值替換,單引號沒有這個效果

Eg.

$abc='123';echo "$abc"; //這樣會輸出123echo '$abc'; //這樣會輸出$abcecho "\n"; //這樣會輸出一個分行符號echo '\n'; //這樣會輸出\n兩個字元(一個斜杠一個n)

回到問題,
“中”這個漢字在UTF-8的16進位編碼是0xe4,0xb8,0xad
因此在雙引號字串中,會被轉義為 “中” x開頭表示這是一個以十六進位表達的字元,就和HTML中&xe4; 一樣
單引號字串中,直接輸出xe4xb8xad

如果你的環境編碼是在UTF-8下面, str1和str3等價, 如果直接echo, 都會輸出"中", 如果是二進位層面三個位元組比較, 也是完全相等, PHP中的字串就是直接本地編碼二進位儲存的

如果你的環境編碼是非UTF-8(例如GBK), str1基本上是個亂碼, str1和str3也不再等價

至於str2, 它無論什麼時候都會輸出 '\xe4\xb8\xad' (不含引號, 在單引號的字串中, 只有單引號本身需要轉義成\', 其它情況的\都視為一般字元處理

只解釋第一個與第二個的區別,也就是單引號與雙引號的區別

雙引號:引號內部會被轉義
單引號:引號內部不會被轉義

$a = 123;echo "output:$a";//output:123echo 'output:$a';//output:$a//下面的樣本僅限linux的php-cliecho "new line\nsecond line";/*會換行,輸出:new linesecond line*/echo 'no new line\n aaa';/*不會換行,輸出:no new line\n aaa*/

\x後跟著十六進位數位屬於逸出字元,逸出字元只有在雙引號"中才起作用。單引號中只有對單引號本身'和反斜線\的轉義有效,其他的都無效。

PHP本身不區分字元編碼。也就是說,$str1是一個三位元組的字串,字串的三個位元組分別是(十六進位編碼)E4 B8 AD。如果在UTF-8編碼中,就是字。其他編碼中就不一定了。

$str2則是一個12位元組的字串,就是你輸入的那些字元。

$str3則是一個字串,如果你把檔案以UTF-8編碼儲存,那就和$str1是一樣。如果你以GBK儲存,那就是兩個位元組的D6 D0,如果你以BIG5儲存,就是A4 A4

不管是UTF-8、GBK還是BIG5,甚至於很多其他的語言編碼,都是遵循EUC的,也就是說對於ASCII字元,他們的編碼都是一致的,所以無論用哪種編碼儲存,對PHP的代碼工作都不會有影響。但是對於非ASCII字元就有很大的區別。

所以PHP中的非ASCII字元要正常顯示,就要保證你的儲存編碼和輸出編碼是一致的。如果是輸出的是HTML,是通過meta標籤或者在HTTP Header中聲明編碼的。如果不一致,那就會出現亂碼了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.