RELATEED CONSULTING
相關咨詢
選擇下列産品馬上(shàng)在線溝通(tōng)
服務時(shí)間(jiān):9:00-18:00
你(nǐ)可(kě)能遇到了下面的問題
關閉右側工具欄
PHP頁面和(hé)Mysql數(shù)據庫的轉UTF8編碼問題總結
  • 作(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ù)據庫了。