Discussion:
怪...亂碼?
(时间太久无法回复)
順著自己走
2004-12-16 13:16:13 UTC
Permalink
我自己寫一個留言版..測試都ok

但今天遇到打中文會亂碼....但不是全都變亂碼..

而是打成"功"的"功"字會變問號耶...不知道大大們有遇過嗎?

是在輸入進mysql中那個字就變亂碼...

但若在msyql中把它改回正常的功字...show出來也是正常沒問題的..

我php版本PHP Version 4.3.4

使用phpMyAdmin 2.5.4

MySQL 版本 4.0.16

感謝解答!
--
夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子
之器不得已BLOG http://www.wretch.cc/blog 安西教練 我想寫日記 嗚嗚o志於天下
矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以
喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦將知59-104-14-243.adsl.dynamic.seed.net.tw海
最近轉戰php
2004-12-16 15:07:45 UTC
Permalink
※ 引述《menjar (順著自己走)》之銘言:
Post by 順著自己走
我自己寫一個留言版..測試都ok
但今天遇到打中文會亂碼....但不是全都變亂碼..
而是打成"功"的"功"字會變問號耶...不知道大大們有遇過嗎?
是在輸入進mysql中那個字就變亂碼...
但若在msyql中把它改回正常的功字...show出來也是正常沒問題的..
我php版本PHP Version 4.3.4
使用phpMyAdmin 2.5.4
MySQL 版本 4.0.16
感謝解答!
是許功蓋的問題
因為有部分big5碼的字
第二位用到了特殊字元
例如反斜線\
所以才造成這些問題

這不是php系統的問題
而是big5編碼本身的問題

解決方法有二

方法1.
網頁仍然用big5撰寫
但是要善用字串處理函數
例如addslash()

這個函數會檢查輸入的字串
如果遇到特殊字元
就會加上反斜線\
然後輸出新的字串
試試這個
<?php
$str = "許功蓋<br>";
echo $str;
echo addslashes($str);
?>


有的php會自動為資料加上\
請進入php.ini
這行magic_quotes_gpc = Off
我是設成off的(預設是On)
自己用函數管

注意
進mysql時把所有有可能發生中文亂碼的字串都用addslash()
而mysql會把多餘的\去掉
所以從mysql讀出來時並不需要另外再處理



方法2
網頁全面用UTF-8改寫
你可能會需要像EmEditor之類可以支援UTF-8編碼的編輯器
很可惜這些大多不是免費的
不過你可以去找比較舊的版本
當初有一些免費的試用版

或者是用convertZ的轉換軟體
這是一個可以把文件編碼做轉換的程式
可以一次執行一堆檔案的轉換(包含底下的資料夾和檔案)
很適合在網頁上的設計

先用big5撰寫網頁
再用它轉出UTF-8的網頁

不過這個軟體也讓我吃過不少苦頭
記得要設定
在"程式設定"->"轉碼設定"
要取消 '加BOM到UTF-8檔案'
否則許多網頁都會出問題

why?
加BOM在檔案開頭
是為了讓電腦知道這是UTF-8檔案
使文字編輯器可以用正確的方式讀取
所以在可以讀取UTF-8檔案的編輯器並不會看到這個字樣(例如 EmEditor)
(這個BOM可以用UltraEditor發現)

但是在做網頁時
這並不是好東西
尤其是php的session_start()
必須寫在第一行
而且之前不可以有輸出

如果加了這個BOM
就會變成
BOM<? session_start(); ...........
在session_start()之前有輸出文字
session就不能用了


用utf-8
傳入database前不需再做addslash
進入database後自然以UTF-8儲存(假設你的mysql不會太舊)
看起來比較方便
但是有幾點要特別注意

如果有檔案的讀寫
例如讀取csv檔
傳入的csv檔是big5
但是網頁卻是UTF-8
那又會出現亂碼

如果有檔案上傳的設計
利用copy( , )時
輸出的檔名必須是用big5

這又是另一個問題
必須用iconv()解決

試試這個
<?php
echo iconv("CP950", "UTF-8", "試試看囉");
echo iconv("BIG5", "UTF-8", "試試看囉");
?>

有時候網頁是用UTF-8寫的
但是檔案讀寫卻需要用big5
可以利用這個函數把big5和UTF-8做轉換
需要php4.3.1以上才行
而且需要有php_iconv.dll這個檔案在c:\php\dlls\
或是在c:\Appserv\php\extensions\
(依你安裝方式而有所不同)

而且在php.ini中
必須把;extension=php_iconv.dll的分號去掉
這樣才會生效

否則常常會出現 致命錯誤,使用未定義函數iconv()......

--
最近被許功蓋整的很慘......
--
 盡力把Java學好
 一定要多看手冊

J2SE http://java.sun.com/j2se/1.4.2/docs/api/ 
 http://www.csie.nctu.edu.tw/document/java/jdk1.4/docs/api/index.html 
J2EE http://java.sun.com/j2ee/1.4/docs/api/index.html 
--
夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子
之器不得已相簿 http://www.wretch.cc/album 有佈景主題 速度很快 可得志於天下
矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以
喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦將知止知止可以不殆 r21602.csie.nctu.edu.tw海
神奇力量論壇
2004-12-18 16:25:37 UTC
Permalink
已經有解決的模組,big5_func.inc,
用Google找找看。
--
神奇力量論壇
http://www.688.idv.tw/forum



"順著自己走" <***@bbs.wretch.cc> 在郵件 news:4FdKZD$***@bbs.wretch.cc
中撰寫...
Post by 順著自己走
我自己寫一個留言版..測試都ok
但今天遇到打中文會亂碼....但不是全都變亂碼..
而是打成"功"的"功"字會變問號耶...不知道大大們有遇過嗎?
是在輸入進mysql中那個字就變亂碼...
但若在msyql中把它改回正常的功字...show出來也是正常沒問題的..
我php版本PHP Version 4.3.4
使用phpMyAdmin 2.5.4
MySQL 版本 4.0.16
感謝解答!
--
夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不
祥之器非君子
Post by 順著自己走
之器不得已BLOG http://www.wretch.cc/blog 安西教練 我想寫日記
嗚嗚o志於天下
Post by 順著自己走
矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀
悲泣之戰勝以
Post by 順著自己走
喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓
天地相合以降甘露民莫
Post by 順著自己走
之令而自均始制有名名亦既有夫亦將知
59-104-14-243.adsl.dynamic.seed.net.tw海
Loading...