php自動(dòng)識(shí)別文字編碼并轉(zhuǎn)換為目標(biāo)編碼的方法
本文實(shí)例講述了php自動(dòng)識(shí)別文字編碼并轉(zhuǎn)換為目標(biāo)編碼的方法。分享給大家供大家參考。具體如下:
在PHP處理頁(yè)面的時(shí)候,我們對(duì)于字符集的轉(zhuǎn)換都是采用了iconv或者mb_convert等函數(shù),但,這其實(shí)是有一個(gè)前提的。即我們事先得知道in和out是什么樣的編碼,我們才能進(jìn)行正確的轉(zhuǎn)換。
雖然大多數(shù)轉(zhuǎn)換都是在gbk和utf-8之間轉(zhuǎn),但如果不知道轉(zhuǎn)換對(duì)象的編碼怎么辦呢?谷歌出來(lái)這么一個(gè)函數(shù)safeEncoding,可以簡(jiǎn)單的識(shí)別UTF8和GBK的編碼。這個(gè)函數(shù)在一定程度上識(shí)別的很準(zhǔn)確,但是在一些比較復(fù)雜的環(huán)境中就不是那么的好用了. 下面我結(jié)合了GBK和UTF-8編碼的不同點(diǎn),使用正則表達(dá)式來(lái)判斷UTF-8編碼并使用mb_convert_encoding函數(shù)來(lái)進(jìn)行轉(zhuǎn)換. 在國(guó)內(nèi),基本上比較流行的編碼就是GBK和UTF-8, 所以這個(gè)函數(shù)是針對(duì)這兩個(gè)編碼進(jìn)行自動(dòng)轉(zhuǎn)換的.
/**
* @ string 需要轉(zhuǎn)換的文字
* @ encoding 目標(biāo)編碼
**/
function detect_encoding($string,$encoding = 'gbk'){
$is_utf8 = preg_match('%^(?:[\x09\x0A\x0D\x20-\x7E]| [\xC2-\xDF][\x80-\xBF]| \xE0[\xA0-\xBF][\x80-\xBF] | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} | \xED[\x80-\x9F][\x80-\xBF] | \xF0[\x90-\xBF][\x80-\xBF]{2} | [\xF1-\xF3][\x80-\xBF]{3} | \xF4[\x80-\x8F][\x80-\xBF]{2} )*$%xs', $string);
if($is_utf8 && $encoding == 'utf8'){
return $string;
}elseif($is_utf8){
return mb_convert_encoding($string, $encoding, "UTF-8");
}else{
return mb_convert_encoding($string, $encoding, 'gbk,gb2312,big5');
}
}
希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。
- 基于jquery的textarea發(fā)布框限制文字字?jǐn)?shù)輸入(添加中文識(shí)別)
- 舉例講解Java的RTTI運(yùn)行時(shí)類(lèi)型識(shí)別機(jī)制
- java識(shí)別一篇文章中某單詞出現(xiàn)個(gè)數(shù)的方法
- Java基于直方圖應(yīng)用的相似圖片識(shí)別實(shí)例
- Java進(jìn)階教程之運(yùn)行時(shí)類(lèi)型識(shí)別RTTI機(jī)制
- java網(wǎng)絡(luò)編程之識(shí)別示例 獲取主機(jī)網(wǎng)絡(luò)接口列表
- java asp分析各種搜索引擎的關(guān)鍵字,自動(dòng)識(shí)別url 中關(guān)鍵字的編碼
- 基于OpenCV的PHP圖像人臉識(shí)別技術(shù)
- View中如何進(jìn)行手勢(shì)識(shí)別onFling動(dòng)作實(shí)現(xiàn)介紹
- 識(shí)別率很高的java文字識(shí)別技術(shù)
相關(guān)文章
php中l(wèi)trim()、rtrim()與trim()刪除字符空格實(shí)例
這篇文章主要介紹了php中l(wèi)trim()、rtrim()與trim()刪除字符空格的方法.以實(shí)例形式分別講述了ltrim()、rtrim()與trim()的具體用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11
php 使用 __call實(shí)現(xiàn)重載功能示例
這篇文章主要介紹了php 使用 __call實(shí)現(xiàn)重載功能,結(jié)合實(shí)例形式分析了PHP使用__call實(shí)現(xiàn)重載的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
PHP 自動(dòng)加載類(lèi)原理與用法實(shí)例分析
這篇文章主要介紹了PHP 自動(dòng)加載類(lèi)原理與用法,結(jié)合具體實(shí)例形式分析了PHP 自動(dòng)加載類(lèi)基本概念、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
php安裝dblib擴(kuò)展,連接mssql的具體步驟
下面小編就為大家?guī)?lái)一篇php安裝dblib擴(kuò)展,連接mssql的具體步驟。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
PHP使用new StdClass()創(chuàng)建空對(duì)象的方法分析
這篇文章主要介紹了PHP使用new StdClass()創(chuàng)建空對(duì)象的方法,結(jié)合具體實(shí)例形式分析了php空對(duì)象的創(chuàng)建與使用方法,需要的朋友可以參考下2017-06-06
實(shí)戰(zhàn)mysql導(dǎo)出中文亂碼及phpmyadmin導(dǎo)入中文亂碼的解決方法
因?yàn)橐驯緳C(jī)的gbk編碼的mysql數(shù)據(jù)庫(kù)導(dǎo)入到虛擬主機(jī)去,服務(wù)商只提供了phpmyadmin供你導(dǎo)入導(dǎo)出。2010-06-06

