我很努力地理解PHP中的字符編碼。瞭解PHP中的字符編碼
請看下面的代碼(可以運行它here):
$string = "\xe2\x82\xac";
var_dump(mb_internal_encoding());
var_dump($string);
var_dump(unpack('C*', $string));
$utf8string = mb_convert_encoding($string, "UTF-8");
var_dump($utf8string);
var_dump(unpack('C*', $utf8string));
mb_internal_encoding("UTF-8");
var_dump($string);
var_dump($utf8string);
我有一個字符串,實際上€字符,其Unicode代碼點來表示。到PHP 5.5
使用的內部編碼是ISO-8859-1
,因此我認爲我的字符串將使用此編碼進行編碼。用unpack
我可以看到我的字符串的咬合表示,它對應於我用來定義字符串的十六進制代碼。
然後我將字符串的編碼轉換爲UTF-8
,使用mb_convert_encoding
。此時,字符串在屏幕上以不同的方式顯示,並且其字節表示發生變化(這是預期的)。
如果我更改PHP
內部編碼也UTF-8
,我期望utf8string
正確顯示在屏幕上,但這不會發生。
我缺少什麼?
正在瀏覽器中運行此操作嗎?這將自己選擇字符編碼,你最好脫離實體逃離違規角色。 – Chris
向'
'添加''以確保瀏覽器也期待UTF8 – RiggsFollyPHP中的所有字符串都被視爲二進制字符串,'mb_internal_encoding()'幾乎不影響其他字符而不是其他'mb_ *'函數的工作方式。您也無法在同一個文檔中同時輸出ISO-8859和UTF8,並且期望無論什麼程序正在生成輸出,任何事情都會發生。 – Sammitch