日韩精品免费在线_含咬她的花蒂高潮h|HD中文字幕在线播放,国产精品久久久久久久久久妇女,精品国产乱码久久久久久蜜臀,风流少妇被粗大爽

0411-39943997
工作時間:周一至周日 8:30-22:00
前端技術(shù)
News and information

PHP與UTF-8編碼相關(guān)問題

標簽:瀏覽次數(shù):?? 時間:2017-08-28

PHP處理各種字符串時有時會碰到亂碼的問題,其實我們在開發(fā)實踐中只要堅持一個原則:編輯代碼、存儲數(shù)據(jù)、輸出數(shù)據(jù)等都統(tǒng)一使用UTF-8編碼。堅持這個原則會規(guī)避很多字符串亂碼的問題。

PHP處理UTF-8

PHP有mbstring擴展,自帶幾種字符串截取函數(shù),其中常用到的就是 substr 和 mb_substr。

當操作 Unicode 字符集的時候,使用相應(yīng)的函數(shù)代替原生的字符串函數(shù)。舉個例子,一個文件編碼為 UTF-8 的 PHP 代碼,假如使用 strlen() 函數(shù)是錯誤的,請使用 mb_strlen() 函數(shù)代替。

如果你使用substr截取中文字符時會出現(xiàn)亂碼,這是因為substr是按字節(jié)來截取的。即UTF-8編碼的中文,使用substr截取,只會截取1/3個中文,當然出現(xiàn)亂碼了。UTF-8編碼時,一個漢字是3個字節(jié)。同樣其他國家不同語言文字會產(chǎn)生多字節(jié)字符串問題,所以我們統(tǒng)統(tǒng)使用mb_strlen()來處理。

如果不清楚字符串的編碼格式的話,可以用mb_detect_encoding檢查。

如果要轉(zhuǎn)換編碼,使用函數(shù)iconv(),如GB2312  轉(zhuǎn)UTF-8:

iconv("GB2312","UTF-8",$text);

當遇到無法確定原編碼是何種編碼,或者iconv轉(zhuǎn)化后無法正常顯示時可用mb_convert_encoding 函數(shù)。

$str = mb_convert_encoding($str, "UTF-8");

其實在php.ini中有個選項設(shè)置default_charset = "UTF-8";,很多字符串處理函數(shù)如htmlentities()會使用這個默認字符集。

我們可以使用header()函數(shù)明確指定字符集,在PHP返回的響應(yīng)中,Content-Type首部默認也使用這個值。

header("Content-Type: text/html;charset=utf-8");

當然,我們在創(chuàng)建HTML文檔的頭部也應(yīng)該加入這個mata標簽:

<meta charset="UTF-8" />

PHP瀏覽器下載文件名亂碼

雖然我們將php代碼、輸出數(shù)據(jù)時都使用UTF-8,但是可能還會遇到很多詭異現(xiàn)象。比如,我遇到的坑,當要從服務(wù)器上下載一個文件時,IE瀏覽器、Edge在下載中文文件名時會亂碼,還有當文件名包含空字符時,下載后的文件名稱空格變成了+號等等這些詭異現(xiàn)象。

其實,PHP通過 header() 函數(shù)下載文件的時候,也要考慮瀏覽器和操作系統(tǒng)(大部分人使用的是 Windows),對于 Chrome 來說,輸出的文件名編碼可以是 UTF-8,Chrome 會自動將文件名轉(zhuǎn)換為 GBK 編碼。

而對于IE 來說,它繼承了操作系統(tǒng)的環(huán)境,所以下載文件名假如是中文必須轉(zhuǎn)碼為 UTF-8 編碼,否則下載的時候用戶看到的是亂碼文件名。 解決辦法有了:

$agent=$_SERVER["HTTP_USER_AGENT"]; 
if(strpos($agent,'MSIE')!==false ){ 
    $filename = iconv("UTF-8","GBK","中文附件.pdf"); 
    header("Content-Disposition: attachment; filename=\"$filename\""); 
}

PHP處理MySQL亂碼

首先保證你的 Mysql 都是 UTF-8。然后 Mysql 客戶端連接的時候也保持 UTF-8,具體到 PHP 中,就是 mysqli 或者 PDO 擴展連接 Mysql 的時候都設(shè)置 UTF-8 作為連接編碼,兩邊保持一致,一般就不會遇到亂碼問題。

例如使用PDO鏈接Mysql時,使用UTF-8字符集:

$pdo->query('SET NAMES utf8;');

總結(jié)

1.處理多字節(jié)字符串時一定要知道數(shù)據(jù)的字符編碼;

2.使用UTF-8字符編碼存儲數(shù)據(jù);

3.使用UTF-8字符編碼輸出數(shù)據(jù)。



本文地址:http://www.achat-haute-saone.com/front/20170828187.html
Copyright? 2011 仟億科技,All rights reserved.
首頁關(guān)于我們新聞資訊服務(wù)項目軟件產(chǎn)品解決方案成功案例網(wǎng)站地圖加入我們聯(lián)系我們