- 作(zuò)者:admin
- 發表時(shí)間(jiān):2013-07-02 14:17:31
- 來(lái)源:未知
一個(gè)網站(zhàn)如果需要國際化,就需要将編碼從GB2312轉成UTF-8,其中有(yǒu)很(hěn)多(duō)的問題需要注意,如果沒有(yǒu)轉換徹底,将會(huì)有(yǒu)很(hěn)多(duō)的編碼問題出現!
二.PHP頁面轉UTF-8編碼問題
1.在代碼開(kāi)始出加入一行(xíng): header("Content-Type: text/html;charset=utf-8");
2.PHP文件編碼問題 點擊編輯器(qì)的菜單:“文件”->“另存為(wèi)”,可(kě)以看到當前文件的編碼,确保文件編碼為(wèi):UTF-8,如果是ANSI,需要将編碼改成:UTF-8。
3.PHP文件頭BOM問題: PHP文件一定不可(kě)以有(yǒu)BOM标簽,否則,會(huì)出現session不能使用的情況,并有(yǒu)類似的提示: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent 這是因為(wèi),在執行(xíng)session_start() 的時(shí)候,整個(gè)頁面不能有(yǒu)輸出,但(dàn)是當由于前PHP頁面存在BOM标簽,PHP把這個(gè)BOM标簽當成是輸出了,所以就出錯了! 所以PHP頁面一定要删除BOM标簽
删除這個(gè)BOM标簽的方法:
1.可(kě)以用Dreamweaver打開(kāi)文件,并重新保存,即可(kě)以去除BOM标簽!
2.可(kě)以用EditPlus打開(kāi)文件,并在菜單“首選項”->“文件”->"UTF-8标識",設置為(wèi):“總是删除簽名”,然後保存文件,即可(kě)以去除BOM标簽!
3.PHP以附件形式保存文件的時(shí)候,UTF-8編碼問題: PHP以附件形式保存文件,文件名必須是GB2312編碼,否則,如果文件名中有(yǒu)中文的話(huà),将是顯示亂碼: 如果你(nǐ)的PHP本身是UTF-8編碼格式的文件,需要将文件名變量由UTF-8轉成GB2312: iconv("UTF-8", "GB2312", "$filename");
4.截斷顯示文章标題時(shí),出現亂碼或者“?”問号的問題:
一般文章标題很(hěn)長的時(shí)候,會(huì)顯示一部分标題,會(huì)對文章标題進行(xíng)截斷,由于一個(gè)UTF-8編碼格式的中文字符會(huì)占用3個(gè)字符寬度,截取标題的時(shí)候,有(yǒu)時(shí)會(huì)隻截取到一個(gè)中文字符的1個(gè)字符或2字符寬度,沒截取完整,将出現亂碼或“?”問号的情況,用下面的函數(shù)截取标題,就不會(huì)有(yǒu)問題:
function get_brief_str($str, $max_length) { echo strlen($str) . " "; if (strlen($str) > $max_length) { $check_num = 0; for ($i = 0; $i < $max_length; $i++) { if (ord($str[$i]) > 128) $check_num++; } if ($check_num % 3 == 0) $str = substr($str, 0, $max_length) . "..."; else if ($check_num % 3 == 1) $str = substr($str, 0, $max_length +2) . "..."; else if ($check_num % 3 == 2) $str = substr($str, 0, $max_length +1) . "..."; } return $str; }
MYSQL數(shù)據庫使用UTF-8編碼的問題
1.用phpmyadmin創建數(shù)據庫和(hé)數(shù)據表 創建數(shù)據庫的時(shí)候,請(qǐng)将“整理(lǐ)”設置為(wèi):“utf8_general_ci”或執行(xíng)語句:
CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
創建數(shù)據表的時(shí)候:如果是該字段是存放中文的話(huà),則需要将“整理(lǐ)”設置為(wèi):“utf8_general_ci”,如果該字段是存放英文或數(shù)字的話(huà),默認就可(kě)以了。
相應的SQL語句,例如:
CREATE TABLE `test` ( `id` INT NOT NULL , `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM ;
2.用PHP讀寫數(shù)據庫
在連接數(shù)據庫之後:
$connection = mysql_connect($host_name, $host_user, $host_pass);
加入兩行(xíng):
mysql_query("set character set 'utf8'");//讀庫 mysql_query("set names 'utf8'");//寫庫
就可(kě)以正常的讀寫MYSQL數(shù)據庫了。