iT邦幫忙

0

php架設出亂碼

<?php
$passed = $_COOKIE["passed"];
if ($passed != "TRUE")
{
header("location:index.htm");
exit();
}
?>
<HTML>
<HEAD>
<TITLE>會員管理</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
</HEAD>
<BODY>
<P ALIGN="center"><IMG SRC="management.jpg"></P>
<P ALIGN="center">
<A HREF="modify.php">修改會員資料</A>     
<A HREF="delete.php">刪除會員資料</A>     
<A HREF="logout.php">登出網站</A>
</P>
</BODY>
</HTML>

MySQL 客戶端版本: 5.0.51a
伺服器版本: 5.0.51b-community-nt-log
apache 2.5.10
請問小弟我已經在MYSQL裡面建立資料表格,表格跟資料的校對都用utf8_unicode_ci
不過在測試的時候,都跑出亂碼...我重灌在測試以後還是一樣。
拜託各位大大,指點我一下,是哪邊沒有設定好嗎????

看更多先前的討論...收起先前的討論...
wordsmith iT邦高手 1 級 ‧ 2009-04-23 18:55:15 檢舉
會不會是表頭雖然設成UTF-8,但是文件(這個web page)本身還是BIG5?
fireflybug iT邦研究生 5 級 ‧ 2009-04-24 09:12:19 檢舉
用UTF-8來撰寫會比較好喔,不然晚點就會有 許蓋功 的問題了................
我現在網頁都用UTF-8編碼,中文比較不會遇到亂碼問題。
wordsmith iT邦高手 1 級 ‧ 2009-04-24 09:39:37 檢舉
的確是這樣子,改用UTF-8來寫,是避免一大堆問題的根本之道呀。
許蓋功 是什麼意思阿,
聽過很多前輩說 BIG-5 到最後使用上會有一大堆問題,
不過小弟我還沒遇到...從一開始我就用UTF-8,
後來遇到這個編碼亂掉的美麗錯誤...耗費了我ㄧ整天,
我麻雀般的大腦..思考了一天...搭車時間也在想...
難道是宿命嗎??
fillano iT邦超人 1 級 ‧ 2009-04-25 20:00:26 檢舉
BIG5編碼裡面有幾個字第二個位元組是0x5C,也就是"\"。這是ASCII的控制字元,容易導致程式出問題,所以需要在字後面額外加上"\"來跳脫。「許功蓋」是裡面幾個常見字。

用utf8就不會有這個問題。

會有問題的big5編碼中文字有:
A45C么 AE5C娉 B85C稞 C25C擺 A55C功
AF5C珮 B95C鈾 C35C黠 A65C吒 B05C豹
BA5C暝 C45C孀 A75C吭 B15C崤 BB5C蓋
C55C髏 A85C沔 B25C淚 BC5C墦 C65C躡
A95C坼 B35C許 BD5C穀 AA5C歿 B45C廄
BE5C閱 AB5C俞 B55C琵 BF5C璞 AC5C枯
B65C跚 C05C餐 AD5C苒 B75C愧 C15C縷

2 個回答

34
fillano
iT邦超人 1 級 ‧ 2009-04-23 19:40:55
最佳解答

先看一下你的code:

&lt;pre class="c" name="code">
&lt;?php
$passed = $_COOKIE["passed"];
if ($passed != "TRUE")
{
header("location:index.htm");
exit();
}
?>
&lt;HTML>
&lt;HEAD>
&lt;TITLE>會員管理&lt;/TITLE>
&lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
&lt;/HEAD>
&lt;BODY>
&lt;P ALIGN="center">&lt;IMG SRC="management.jpg">&lt;/P>
&lt;P ALIGN="center">
&lt;A HREF="modify.php">修改會員資料&lt;/A>     
&lt;A HREF="delete.php">刪除會員資料&lt;/A>     
&lt;A HREF="logout.php">登出網站&lt;/A>
&lt;/P>
&lt;/BODY>
&lt;/HTML>

既然你的內容是繁體中文(big5),為何會有:

&lt;pre class="c" name="code">
&lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">

請把這一行改一改吧。

校對影響的主要是排序,其實跟資料怎麼存沒關係。就算你的資料是big5編碼,校對用utf-8也不會有影響,只要存入跟取出的校對一致,同時與table設定的一致,就不會有問題。

感恩阿...我今天寫了一天,卡在亂碼這邊!!!
改過BIG-5之後,亂碼變繁中了!!

fillano iT邦超人 1 級 ‧ 2009-04-24 08:27:07 檢舉

不客氣,有幫到忙就好:)

fillano iT邦超人 1 級 ‧ 2009-04-24 22:30:30 檢舉

補充:
http://www.jaceju.net/blog/?p=116

Jaceju大這一篇寫得非常完整,值得推薦喔,趕快去看一看。

30
vincent118
iT邦高手 5 級 ‧ 2009-04-23 18:54:33

如果你的網站沒有其他的服務,解決的方式為修改/etc/php.ini的設定值,在php.ini中預設為default_charset = "iso-8859-15",若確定站台僅供正體中文(繁體中文最正確的解釋應為正體中文)則可更改為default_charset = "big5"。
但若是機器上還有跑其他的服務需要用UTF-8的編碼,為使兩者不相沖,可以把default_charset的值給拿掉或設成default_charset = "off" 皆可,如此更改的話就可以在瀏覽UTF-8網站時以UTF-8的編碼顯示,而瀏覽其他站台時則以Big-5的編碼顯示!
但需注意的是必需在網頁的裡加注或,如此瀏覽器才會知道您要使用何種方式的編碼來呈現內文!

我my.ini 內 default_charset = "off"
再加上樓下大大的UTF8改成BIG5,
終於變繁中了..我搞了一整天,最後還是靠前輩們指點

我要發表回答

立即登入回答