首頁 後端開發 PHP問題 解決php亂碼utf-8問題

解決php亂碼utf-8問題

Jul 04, 2020 am 09:58 AM
php亂碼

php亂碼utf-8問題的解決方法:1、在HTML頁面中加入程式碼「charset=utf-8」;2、在PHP頁面中加入程式碼「header("Content-Type: text/ html;charset=utf-8");」。

解決php亂碼utf-8問題

一.HTML頁面轉UTF-8編碼問題 
1.在head後,title前加入一行:

<meta http-equiv=&#39;Content-Type&#39; content=&#39;text/html; charset=utf-8&#39; />
登入後複製

順序不能錯,一定要在

顯示的標題有可能是亂碼!

2.html檔案編碼問題:

點擊編輯器的選單:“檔案”->“另存為”,可以看到目前檔案的編碼,確保檔案編碼為:UTF -8, 
如果是ANSI,需要將編碼改成:UTF-8。
3.HTML檔案頭BOM問題: 
將檔案從其他的編碼轉換成UTF-8編碼時,有時會在檔案的最開始加上一個BOM標籤, 
在個BOM標籤可能會導致瀏覽器在顯示中文的時候出現亂碼。 
刪除這個BOM標籤的方法: 
1.可以用Dreamweaver開啟文件,並重新儲存,也就是可以移除BOM標籤!
2.可以用EditPlus開啟文件,並在選單「偏好設定」->「檔案」->"UTF-8識別",設定為:「總是刪除簽章」, 
然後儲存文件,即可以去除BOM標籤!
4.WEB伺服器UTF-8編碼問題: 
如果你按以上所列的步驟做了,還是有中文亂碼問題, 
請檢查你的所使用的WEB伺服器的編碼問題 
如果你使用的是Apache,請將設定檔裡的:charset 設為:utf-8(這裡只列出方法,具體格式請參考apache的設定檔) 
如果你使用的是Nginx,請將nginx.conf裡的:charset 設為utf-8, 
具體找到"charset gb2312;"或類似的語句,改成:「charset utf-8;」。

二.PHP頁轉UTF-8編碼問題 
1.在程式碼開始出加入一行: 

header("Content-Type: text/html;charset=utf-8");
登入後複製

2.PHP檔案編碼問題

點擊編輯器的選單:“檔案”->“另存為”,可以看到目前檔案的編碼,確保檔案編碼為:UTF-8, 
如果是ANSI,需要將編碼改成:UTF-8。
3.PHP檔案頭BOM問題: 
PHP檔案一定不可以有BOM標籤 
否則,會出現session不能使用的情況,有類似的提示: 
Warning: session_start() [ function.session-start]: Cannot send session cache limiter - headers already sent 
這是因為,在執行session_start() 的時候,整個頁面不能有輸出,但是當由於前PHP頁面存在BOM標籤, 
PHP把這個BOM標籤當成輸出了,所以就出錯了! 
所以PHP頁面一定要刪除BOM標籤 
刪除這個BOM標籤的方法: 
1.可以用Dreamweaver開啟文件,並且重新儲存,也就是可以移除BOM標籤!
2.可以用EditPlus開啟文件,並在選單「偏好設定」->「檔案」->"UTF-8識別",設定為:「總是刪除簽章」, 
然後儲存文件,即可以去除BOM標籤!
4.PHP以附件形式儲存檔案的時候,UTF-8編碼問題: 
PHP以附件形式儲存文件,檔案名稱必須是GB2312編碼, 
否則,如果檔案名稱中有中文的話,將會是顯示亂碼: 
如果你的PHP本身是UTF-8編碼格式的文件, 
需要將檔案名稱變數由UTF-8轉成GB2312: 
iconv("UTF-8", " GB2312", "$filename"); 

5.截斷顯示文章標題時,出現亂碼或「?」問號的問題: 
一般文章標題很長的時候,會顯示一部分標題,會將文章標題截斷, 
由於一個UTF-8編碼格式的中文字元會佔用3個字元寬度, 
截取標題的時候,有時會只截取到一個中文字元的1個字元或2字元寬度, 
沒截取完整,將出現亂碼或「?」問號的情況, 
用下面的函數截取標題,就不會有問題:

function get_brief_str($str, $max_length) 
{ 
echo strlen($str) ."<br>"; 
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資料庫使用UTF-8編碼的問題

1.用phpmyadmin建立資料庫和資料表 
建立資料庫的時候,請將「整理」設為:「utf8_general_ci」 
或執行語句:

CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 

#建立資料表的時候:如果是該欄位是存放中文的話,則需要將「整理」設為:「「建立資料表」的時候:如果是該欄位是存放中文的話,則需要將「整理」設定為:「「整理」資料表的時候:如果是該欄位是存放中文的話,則需要將「整理」設定為:「「整理」資料表的時候:如果是該欄位是存放中文的話,則需要將「整理」設定為:「「整理」資料表的時候:如果是這個欄位是存放中文的話,則需要整理「」 ”,

如果該欄位是存放英文或數字的話,預設就可以了。

對應的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讀寫資料庫

在連接資料庫之後:

$connection = mysql_connect($host_name, $host_user, $host_pass);
登入後複製

加入兩行:

mysql_query("set character set &#39;utf8&#39;");//读库
mysql_query("set names &#39;utf8&#39;");//写库
登入後複製

就可以正常的讀寫MYSQL資料庫了。

四.JS相关的UTF-8编码问题
1.JS读Cookie的中文乱码问题

PHP写cookie的时候需要将中文字符进行escape编码,
否则JS读到cookie中的中文字符将是乱码。
但php本身没有escape函数,我们新写一个escape函数:
function escape($str) 
{ 
preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r); 
$ar = $r[0]; 
foreach($ar as $k=>$v) 
{ 
if(ord($v[0]) < 128) 
$ar[$k] = rawurlencode($v); 
else 
$ar[$k] = "%u".bin2hex(iconv("UTF-8","UCS-2",$v)); 
} 
return join("",$ar); 
}
登入後複製

JS读cookie的时候,用unescape解码,

然后就解决cookie中有中文乱码的问题了。

2.外部JS文件UTF-8编码问题

当一个HTML页面或则PHP页面包含一个外部的JS文件时,

如果HTML页面或则PHP页面是UTF-8编码格式的文件,

外部的JS文件同样要转成UTF-8的文件,

否则将出现,没有包含不成功,调用函数时没有反应的情况。

点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8,

如果是ANSI,需要将编码改成:UTF-8。

五.FLASH相关的UTF-8编码问题

FLASH内部对所有字符串,默认都是以UTF-8处理 
1.FLASH读文普通本文件(txt,html) 
要将文本文件的编码存为UTF-8 
点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8, 
如果是ANSI,需要将编码改成:UTF-8。 
2.FLASH读XML文件 
要将XML文件的编码存为UTF-8 
点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8, 
如果是ANSI,需要将编码改成:UTF-8。 
在XML第1行写: 

3.FLASH读PHP返回数据 
如果PHP编码本身是UTF-8的,直接echo就可以了 
如果PHP编码本身是GB2312的,可以将PHP转存成UTF-8编码格式的文件,直接echo就可以了
如果PHP编码本身是GB2312的,而且不允许改文件的编码格式, 
用下面的语句将字符串转换成UTF-8的编码格式 
$new_str = iconv("GB2312", "UTF-8", "$str"); 
再echo就可以了 
4.FLASH读数据库(MYSQL)的数据 
FLASH要通过PHP读取数据库中的数据 
PHP本身的编码不重要,关键是如果数据库的编码是GB2312的话, 
需要用下面的语句将字符串转换成UTF-8的编码格式 
$new_str = iconv("GB2312", "UTF-8", "$str"); 

5.FLASH通过PHP写数据 
一句话,FLASH传过来的字符串是UTF-8格式的, 
要转换成相应的编码格式,再操作(写文件、写数据库、直接显示等等) 
还是用iconv函数转换 
6.FLASH使用本地编码(理论上不推荐使用) 
如果想让FLASH不使用UTF-8编码,而是使用本地编码 
对于中国大陆地区而言,本地编码是GB2312或GBK 
AS程序内,可以添加以下代码: 
System.useCodepage = true; 
那么FLASH内所有字符都是使用GB2312的编码了 
所有导入到FLASH或者从FLASH导出的数据,都应该做相应的编码转换 
因为使用本地编码,会造成使用繁体中文地区的用户产生乱码,所以不推荐使用

以上是解決php亂碼utf-8問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1659
14
CakePHP 教程
1416
52
Laravel 教程
1310
25
PHP教程
1258
29
C# 教程
1232
24