星期二, 七月 14, 2009

網頁(UTF-8) 於 瀏覽器 出現亂碼解法

前幾天聽到一件很有趣的事, 解法也很有趣.

網頁現在都是採用 UTF-8 編碼, 但是在 IE 呈現時, 卻是出現亂碼(自動偵測語系).

聽到的解法: 用 iconv() 把語言轉成 Big5 就可以出現中文, 當下是有點哭笑不得~ XD

正確解法有下面幾種:

  1. 於 HTML head 指定此頁編碼為 UTF-8
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
  2. PHP 送 Header 告訴瀏覽器這頁是 UTF-8 編碼
    <?php
    header("Content-Type:text/html; charset=utf-8");
    ?>
  3. 設定 Apache 送出頁面預設語系 UTF-8 (比較不建議用此方法)
    addDefaultCharset UTF-8

    # 不過建議這行要包在 Directory 或 VirtualHost 內, 才不會影響到其它網頁.
    <Directory "/var/*/blog">
    addDefaultCharset UTF-8
    </Directory>
     
    <VirtualHost *>
    addDefaultCharset UTF-8
    </VirtualHost>

延伸閱讀

相關標籤

this is comment icon [回覆]

另外補充一個我很久之前解過的狀況
<head>

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

</head>
關於這個解法
<title>之間如果有顯示中文</title>
必須把<title>放在meta之後
否則偶些瀏覽器常會出現一片空白的畫面

Comment by Dylan (07/14/2009 18:44)

this is comment icon [回覆]

你好 我是php新手 可以問你一個問題嗎?
我用Dreamweaver在寫 "加入會員" 的網頁
我寫好後發現一個問題 當註冊資料填好 按送出後 沒辦法到我所指定的頁面
而在原本的註冊頁面面顯示
Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\wamp\www\register.php:1) in C:\Program Files\wamp\www\register.php on line 78

這裡程式碼
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));

Comment by shumi (07/14/2009 22:39)

this is comment icon [回覆]

我來幫Tsung大回答一下XD!回shumi桑,那是因為BOM的關係
如果你不知道什麼是BOM的話,可以看一下這篇小弟寫的文章=////=(羞)

http://liaosankai.pixnet.net/blog/post/24178179
http://doublekai.org/blog/?p=617

有附上BOM的介紹連結與非正式的解決方式(最好的解決方式就是用utf8的編碼去寫程式)
Tsung大不好意思,搶了你的工作

Comment by SANKAI (07/14/2009 23:05)

this is comment icon 回 Dylan [回覆]

嗯嗯, META 指定 UTF-8 編碼, 要放在在 Title 之前, 這樣子瀏覽器才不會找錯編碼, 出現一片空白.

我記得之前有寫過畫面空白的解法, 好像有三種解法, 但是現在一時找不到.. Orz..

感謝提供~ :)

Comment by Tsung (07/15/2009 09:21)

this is comment icon 回 SANKAI [回覆]

哈, 感謝您的幫忙~ :P
BOM 的問題, 可以考慮先 打開 editplus(或其它編輯器), 去設定儲存時取消 BOM.
再將檔案用 editplus 打開, 然後存檔一次即可~ :)

註: 不好意思, 太久沒用 windows, 不知道有什麼編輯器可以用. Orz..

Comment by Tsung (07/15/2009 09:23)

this is comment icon [回覆]

最近要寫Flash/PHP的程式...XP
所以說時常逼著我要在Windows下寫PHP...Orz
在Notpad++選單的"格式"就可以轉換了
在Windows寫PHP沒選好編輯器都會有一堆奇奇怪怪的問題出現

Comment by renn999 (07/20/2009 11:46)

this is comment icon 回文章 [回覆]

应该第一第二中方法都是用
我一般用 gb2312 编码,那样文件小

Comment by 华晨 (10/27/2009 11:54)

this is comment icon 回 华晨 [回覆]

現在建議還是都轉 UTF-8 比較好耶~ :)

Comment by Tsung (10/27/2009 12:01)

this is comment icon Thank you [回覆]

謝謝,解決了我2hr的問題!

Comment by happy (11/29/2009 17:51)

this is comment icon thanks you [回覆]

終於解決這問題。給你一點回饋 ^^

Comment by ans (12/21/2009 13:46)

this is comment icon echo "中文" 會變亂碼 [回覆]

預設瀏覽器是firefox3.5 檢視裡面的字元編碼預設是unicode(utf-8)
我資料庫編碼是utf-8 echo資料庫的資料時是正常的
但是單純echo "中文"的話 就會變亂碼
雖然可以把檢視的編碼改成正體中文後就可以正常顯示..不過還是很困擾是哪裡出了問題:(

Comment by 小麥 (12/24/2009 17:37)

this is comment icon 回 小麥 [回覆]

你的檔案存檔是存成 Big5 了.
所以你顯示的是 Big5, 並不是 UTF-8.
檔案儲存那邊修改 UTF-8 即可.

Comment by Tsung (12/24/2009 19:31)

this is comment icon 解決了 [回覆]

我用的是pspad 我之前爬文已經有先去改過預設存檔的編碼
很蠢的是 我一直都是echo同一支程式 即使我另存新檔再echo還是一樣
不過剛剛看到您的提醒後 我試著開一個新的檔案再存檔就正常了
真的很感謝您^^

Comment by 小麥 (12/24/2009 23:46)

this is comment icon 我是那麼做的 [回覆]

用記事本存成utf-8這樣就可以解決~網頁一半正常一半呈現亂碼的狀態了

Comment by 芽芽婷 (07/06/2010 11:24)
Add this page to del.icio.us

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~