1. 程式人生 > >為什麼我們學習一開始就要用utf-8

為什麼我們學習一開始就要用utf-8

今天,45期的同學在討論為什麼要用utf-8,而不用gbk,瀏覽器預設都是gbk編碼,
html還好 已經講了相應的語言設定標籤,php的header標籤還沒講,經常要改變瀏覽器編碼才能正常顯示中文。
header("Content-Type:text/html;charset=utf-8");

utf8和gbk相比,不僅僅是帶來了更大的字符集支援,還有國際化的作用,比如用utf-8做的中文網站即使在英文系統下也不需要下載中文字型檔才能正常顯示(大家可以搜一下utf-8和gbk相比的優點)。
或許你說這是前臺的事,和我們內層php的處理沒有關係,其實不然,使用utf-8 可以避免很多在php中發生的一些頭疼的問題。

比如程式的相容性
discuz的gbk版本一度不支援php5.4(不知現在2.5支援了沒),因為php5.4它內建編碼自 ISO-8859-1 改成了 UTF-8。
htmlspecialchars和htmlentities函式,預設會使用utf-8來處理字串。
如果輸入的字串是GBK編碼,那麼很抱歉, 返回的結果是空的, 輸入的字串被吃了。
discuz大量使用htmlspecialchars做中文過濾,所以出現了很多地方沒有辦法中文輸入出現空白。
當然這可以手動指定htmlspecialchars第三個引數

在比如php的5c問題
在gbk檔案中寫入如下語句,(用記事本建立php檔案打入如下程式碼)
<?php echo("玕");?>
這個語句我們看起來是正確的,但是執行一下,你發現提示錯誤,為什麼?
因為在GBK環境下, “玕”的編碼是”0xab 0x5c, 5c 是 “\”的ascii值 他將後面的"引號轉義了, 所以就語法錯誤


在比如一些字元分隔問題
$r = explode("|", "滕華弢|海青");
  1. var_dump($r);

我們想把這2個名字分開,但是卻得不到想要的結果
因為弢字他的GBK編碼值為: 8f7c, 不巧的是, “|”的ASCII值也是7c,這樣我們想要的結果就得不到了,不過不想編碼轉來轉去,獲取就要考慮正則切割了

後面2個都可以用utf-8編碼來避免出現這樣的問題

閱讀(205) | 評論(0) | 轉發(0) | 給主人留下些什麼吧!~~ 評論熱議