手上有一個網站,大部分的網頁語系都是宣告為 UTF-8,只有某個資料夾裡的網頁比較特別,都宣告為 Big5。今天看到測試的 server 裡, 宣告成 Big5 的那個資料夾的每一支網頁都變成以 UTF-8 模式載入,以至於使用者在不手動切換編碼的狀況下會看到一堆亂碼。

研究了一下原始碼,META 裡有宣告 Big5 沒錯。

<meta http-equiv="Content-Type" content="text/html; charset=big5">

可是從 Chrome 的開發人員工具,可以看到該網頁的 Response headers 送出語系 (charset) 為 UTF-8。

後來想想應該是因為最近把測試 server 上的 PHP,從 PHP 5.2 升級到 PHP 7。

之前用的 PHP 5.2,預設語系 (default charset) 是空的 (PHP's default character set is set to empty.)。

現在用 PHP 7,在 PHP 的官方文件裡有提到,從 PHP 5.6 以後,語系的預設值 (default_charset) 是 UTF-8。

因為我們每一頁都會在 <META> 裡指定 charset,所以就從 php.ini 把預設語系設成空字串。

default_charset = ""

設好以後重啟 Apache 就沒事了。

 

有了這次的經驗才知道,原來在 PHP 程式裡指定送出語系設定:

<?php
        header("Content-Type:text/html; charset=utf-8");
?>

或是從 PHP 的 default_charset、Apache 的 AddDefaultCharset,這些地方指定的語系,會優先於 HTML 的 <META> 裡指定的語系。

arrow
arrow
    文章標籤
    meta header
    全站熱搜

    小攻城師 發表在 痞客邦 留言(0) 人氣()