精華區 > 酷!學園 精華區
分享MySQL和php採用UTF8的詳細方法
yes298:
小弟幾天來給MySQL和php全面採用UTF8搞得
頭昏腦脹, 現在總算搞清楚了, 成功轉換為UTF8.
例如: 許 功 蓋 碁 銹 裏 墻 恒 粧 嫺
這些字已完全問題了.
現總結一下給大伙參考. [如需轉載,請注明出處]
****** 網 站 全 面 採 用 UTF-8 方法. ******
1. 用 vi /etc/httpd/conf/httpd.conf 設定Apache中的語系為:( (記得restart)
AddDefaultCharset UTF-8
2. 用 vi /etc/php.ini 設定php中的語系為:( (記得restart)
default_charset = "utf-8"
3. 用 vi /etc/my.cnf 設定MySQL中的語系為:( (記得restart)
[mysqld]
init_connect='SET NAMES utf8'
default-character-set=utf8
[client]
default-character-set = utf8
4. 建立資料庫時選擇語系: (記得清除DB Cache)
DROP DATABASE IF EXISTS `aa`;
CREATE DATABASE `aa` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
USE `aa`;
CREATE TABLE IF NOT EXISTS `aat` (
`id` char(1) NOT NULL default '1',
`myStr` varchar(200) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
5. 用UltraEdit(v11.20a版) 轉換所有ANSI格式的php檔案轉化為UTF-8格式:
File --> Conversions --> ASCII to UTF-8 (Unicoding Editing)
( 在UltraEdit中按Advanced --> configuration --> File Handling
--> Unicode/UTF-8 Detection --> 剔選Auto detect utf-8 files )
如有需要時,可執行Remove BOM.php. 當用WinXP的Notepad將php檔由ANSI轉為UTF-8時,
因檔頭有BOM,會引起排版問題,故必須移除,執行Remove BOM.php即可自動移除.
Remove BOM.php可由以下網址下載:
http://www.hoyo.idv.tw/hoyoweb/document/view.php?sid=13&author=hoyo&status=view
6. 在php檔中必須加入:
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body>
7. 在連接DB的檔中必須加入3行mysql_query才ok:
$host="localhost"; $DBname="aa";
$user= "root"; $passwd = "";
$link = mysql_connect($host,$user,$passwd) or die ("Fail");
$db = mysql_select_db($DBname, $link) or die ("Fail");
// 要在真正query DB取出資料前,加入以下3行
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER_SET_CLIENT=utf8");
mysql_query("SET CHARACTER_SET_RESULTS=utf8");
$sql = "select * from aat where crid='1'";
$rows = mysql_query($sql);
8. 在php檔中, 如有需要須注意: [Optional]
運用htmlentities和htmlspecialchars時,要似如下:
$chars = htmlentities($chars,ENT_QUOTES,"UTF-8");
$chars = htmlspecialchars($chars,ENT_QUOTES,"UTF-8");
並且在顯示前要用
$chars = html_entity_decode($chars,ENT_QUOTES,"UTF8");
如有用過addslashes()或mysql_real_escape_string()記得用以下:
$chars = stripslashes($chars);
如有需要可以用以下function將不同編碼轉換:
$chars = iconv('Big5','UTF-8',$chars); //由Big5轉為UTF-8
mega:
寫得真是好!!! 不推薦對不起良心啊!!!
rubcandy0208:
太強了,之前資料庫被我改得網頁秀不出資料來,明明以phpmyadmin看有資料,也可以加資料,但是網頁寫不進也秀不出,一定是這樣的問題,回家馬上改一改
梁晉魁:
參閱本文章所寫的步驟,我的處理結果為:
1.所使用的檔案需為uft-8格式;
2.在meta需設定;
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3.在php的檔頭要加
header('Content-type: text/html; charset=utf-8');
header('Vary: Accept-Language');
4.在mysql的連線之後要加
mysql_query("SET NAMES utf8",$connect);
mysql_query("SET CHARACTER_SET_CLIENT=utf8",$connect);
mysql_query("SET CHARACTER_SET_RESULTS=utf8",$connect);
5.在create table時,要指定字元集
create table tb_manager (
i_manager_id int NOT NULL auto_increment,
i_udate int(15),
i_mdate int(15),
)TYPE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
至於httpd.conf,my.conf,php.ini等,則使用default 就可以了;
FIEND:
我不是有意要吐糟你 , 不過你的做法 將會造成你的系統誇平台的障礙 .
許蓋功的問題 不是 big5 或 utf-8 編碼 造成的 ,
而是 吐出字串時 為了 消除 escape 字元 順便把 許蓋功內的 escape 字元 也消除了才造成亂碼 .
使用 utf-8 沒什麼不好 , 但是 utf-8 的容量 有點大 ,而且 utf-8 要再 轉 big5 會有其它難解決的問題 .
從 :
http 的 header ,
php 的 header ,
mysql 的 data type ,
php 的 header ,
切入 強制語細 不是 pubilc 的做法 很不建議大家這樣做 ,會造成後續維護的人的困擾
DEFAULT 的 data type 並不會 造成許蓋功的問題 .
用 public 的設定一樣可以做 utf-8 的輸入輸出, 但好處是在 pubilc 的設定環境中 .
你的軟體可以 通用在 大部份的環境之中 .
反之 如果 你要把軟體放到別的機器上 , 而上頭又有其它 資料了 .
你總不能 要求對方 為了你的軟體 改變自己的系統環境 設定 .
以上建議 供參考 ..
導覽
[0] 文章列表
[#] 下頁
前往完整版本