色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

PHP正確解析UTF-8字符串技巧應用

在《學習php&MYSQL之――字符編碼篇(一)》中介紹了Unicode與UTF-8的轉(zhuǎn)換關系,總結(jié)了一個UTF-8的編碼規(guī)則,根據(jù)這個編碼規(guī)則,寫一個UTF-8編碼的解析程序,以下是php的實現(xiàn):
復制代碼 代碼如下:
<?php
/*
程序功能,$str是中英文混合的UTF-8編碼字符串,
將此字符串根據(jù)UTF-8的編碼規(guī)則正確的解碼并顯示。
*/


$str = '今天非常Happy,所有決定去KFC吃可樂雞翅!!!';

/*
$str 是待截取的字符串
$len 是截取的字符數(shù)
*/
function utf8sub($str,$len) {
if($len <= 0){
return '';
}

$offset = 0; // 截取高位字節(jié)時的偏移量
$chars = 0; // 截取到的字符數(shù)
$res = ''; // 存放截取的結(jié)果字符串

while($chars < $len){
// 先取字符串的第一個字節(jié)
// 將它轉(zhuǎn)為十進制
// 再轉(zhuǎn)為二進制
$high = ord(substr($str,$offset,1));

// echo '$high='. $high .'<br />';

if($high == null ){ // 如果取出高位為null,證明已經(jīng)取到末尾,直接break
break;
}
if(($high>>2) === 0x3F){ // 將高位右移2位,和二進制111111比較,相同則取6個字節(jié)
// 截取2個字節(jié)
$count = 6;
}else if(($high>>3) === 0x1F){ // 將高位右移2位,和二進制11111比較,相同則取5個字節(jié)
// 截取3個字節(jié)
$count = 5;
}else if(($high>>4) === 0xF){ // 將高位右移2位,和二進制1111比較,相同則取4個字節(jié)

// 截取4個字節(jié)
$count = 4;
}else if(($high>>5) === 0x7){ // 將高位右移2位,和二進制111比較,相同則取3個字節(jié)

// 截取5個字節(jié)
$count = 3;
}else if(($high>>6) === 0x3){ // 將高位右移2位,和二進制11比較,相同則取2個字節(jié)
// 截取6個字節(jié)
$count = 2;
}else if(($high>>7) === 0x0){ // 將高位右移2位,和二進制0比較,相同則取1個字節(jié)
$count = 1;
}
// echo '$count='.$count.'<br />';

$res .= substr($str,$offset,$count); // 取出一個字符與$res字符串連接
$chars += 1; // 截取到的字符數(shù)+1
$offset += $count; // 截取高位偏移量向后移$count字節(jié)
}
return $res;
}

echo utf8sub($str,100);

php技術(shù)PHP正確解析UTF-8字符串技巧應用,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 太原市| 平阳县| 襄汾县| 襄汾县| 广平县| 明水县| 定边县| 金山区| 建瓯市| 开化县| 绥阳县| 略阳县| 神木县| 汉阴县| 三台县| 成都市| 赤壁市| 文水县| 靖远县| 洛川县| 淮北市| 五华县| 鹿邑县| 江华| 安龙县| 宝清县| 密山市| 永春县| 托克逊县| 晋城| 西宁市| 准格尔旗| 宜宾市| 娄底市| 绵竹市| 青岛市| 青冈县| 九寨沟县| 商水县| 新竹市| 新野县|