星期二, 七月 14, 2009
網頁(UTF-8) 於 瀏覽器 出現亂碼解法
前幾天聽到一件很有趣的事, 解法也很有趣.
網頁現在都是採用 UTF-8 編碼, 但是在 IE 呈現時, 卻是出現亂碼(自動偵測語系).
聽到的解法: 用 iconv() 把語言轉成 Big5 就可以出現中文, 當下是有點哭笑不得~ XD
正確解法有下面幾種:
- 於 HTML head 指定此頁編碼為 UTF-8
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head> - PHP 送 Header 告訴瀏覽器這頁是 UTF-8 編碼
<?php
header("Content-Type:text/html; charset=utf-8");
?> - 設定 Apache 送出頁面預設語系 UTF-8 (比較不建議用此方法)
addDefaultCharset UTF-8
# 不過建議這行要包在 Directory 或 VirtualHost 內, 才不會影響到其它網頁.
<Directory "/var/*/blog">
addDefaultCharset UTF-8
</Directory>
<VirtualHost *>
addDefaultCharset UTF-8
</VirtualHost>
延伸閱讀
- PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008
- PHP: 文字過長加入 WBR tag function
- 於 Windows 使用 PHP + GetText 來實做多國語系支援(I18N)
- OSDC (Open Source Developers' Conference) 2010 筆記整理
- 於系統 移除 CNNIC 憑證
相關標籤
另外補充一個我很久之前解過的狀況
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
關於這個解法
<title>之間如果有顯示中文</title>
必須把<title>放在meta之後
否則偶些瀏覽器常會出現一片空白的畫面
你好 我是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));
我來幫Tsung大回答一下XD!回shumi桑,那是因為BOM的關係
如果你不知道什麼是BOM的話,可以看一下這篇小弟寫的文章=////=(羞)
http://liaosankai.pixnet.net/blog/post/24178179
http://doublekai.org/blog/?p=617
有附上BOM的介紹連結與非正式的解決方式(最好的解決方式就是用utf8的編碼去寫程式)
Tsung大不好意思,搶了你的工作
回 Dylan
嗯嗯, META 指定 UTF-8 編碼, 要放在在 Title 之前, 這樣子瀏覽器才不會找錯編碼, 出現一片空白.
我記得之前有寫過畫面空白的解法, 好像有三種解法, 但是現在一時找不到.. Orz..
感謝提供~ :)
回 SANKAI
哈, 感謝您的幫忙~ :P
BOM 的問題, 可以考慮先 打開 editplus(或其它編輯器), 去設定儲存時取消 BOM.
再將檔案用 editplus 打開, 然後存檔一次即可~ :)
註: 不好意思, 太久沒用 windows, 不知道有什麼編輯器可以用. Orz..
最近要寫Flash/PHP的程式...XP
所以說時常逼著我要在Windows下寫PHP...Orz
在Notpad++選單的"格式"就可以轉換了
在Windows寫PHP沒選好編輯器都會有一堆奇奇怪怪的問題出現
Thank you
謝謝,解決了我2hr的問題!
thanks you
終於解決這問題。給你一點回饋 ^^
echo "中文" 會變亂碼
預設瀏覽器是firefox3.5 檢視裡面的字元編碼預設是unicode(utf-8)
我資料庫編碼是utf-8 echo資料庫的資料時是正常的
但是單純echo "中文"的話 就會變亂碼
雖然可以把檢視的編碼改成正體中文後就可以正常顯示..不過還是很困擾是哪裡出了問題:(
回 小麥
你的檔案存檔是存成 Big5 了.
所以你顯示的是 Big5, 並不是 UTF-8.
檔案儲存那邊修改 UTF-8 即可.
解決了
我用的是pspad 我之前爬文已經有先去改過預設存檔的編碼
很蠢的是 我一直都是echo同一支程式 即使我另存新檔再echo還是一樣
不過剛剛看到您的提醒後 我試著開一個新的檔案再存檔就正常了
真的很感謝您^^
我是那麼做的
用記事本存成utf-8這樣就可以解決~網頁一半正常一半呈現亂碼的狀態了
發表迴響
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~




