PHP正確解析UTF-8字串有需要的朋友可參考一下。
| 代碼如下 |
複製代碼 |
$str = '今天非常Happy,所有決定去KFC吃可樂雞翅!!!'; /* $str 是待截取的字串 $len 是截取的字元數 */ function utf8sub($str,$len) { if($len <= 0){ return ''; } $offset = 0; // 截取高位位元組時的位移量 $chars = 0; // 截取到的字元數 $res = ''; // 存放截取的結果字串 while($chars < $len){ // 先取字串的第一個位元組 // 將它轉為十進位 // 再轉為二進位 $high = ord(substr($str,$offset,1)); // echo '$high='. $high .' '; if($high == null ){ // 如果取出高位為null,證明已經取到末尾,直接break break; } if(($high>>2) === 0x3F){ // 將高位右移2位,和二進位111111比較,相同則取6個位元組 // 截取2個位元組 $count = 6; }else if(($high>>3) === 0x1F){ // 將高位右移2位,和二進位11111比較,相同則取5個位元組 // 截取3個位元組 $count = 5; }else if(($high>>4) === 0xF){ // 將高位右移2位,和二進位1111比較,相同則取4個位元組 // 截取4個位元組 $count = 4; }else if(($high>>5) === 0x7){ // 將高位右移2位,和二進位111比較,相同則取3個位元組 // 截取5個位元組 $count = 3; }else if(($high>>6) === 0x3){ // 將高位右移2位,和二進位11比較,相同則取2個位元組 // 截取6個位元組 $count = 2; }else if(($high>>7) === 0x0){ // 將高位右移2位,和二進位0比較,相同則取1個位元組 $count = 1; } // echo '$count='.$count.' '; $res .= substr($str,$offset,$count); // 取出一個字元與$res字串串連 $chars += 1; // 截取到的字元數+1 $offset += $count; // 截取高位位移量向後移$count位元組 } return $res; } echo utf8sub($str,100); |
http://www.bkjia.com/PHPjc/632169.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632169.htmlTechArticlePHP正確解析UTF-8字串有需要的朋友可參考一下。 代碼如下 複製代碼 $str = '今天非常Happy,所有決定去KFC吃可樂雞翅!!!'; /* $str 是待截取的字...