程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP正確解析UTF-8字符串

PHP正確解析UTF-8字符串

編輯:關於PHP編程

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 .'<br />';

  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.'<br />';
  
  $res .= substr($str,$offset,$count); // 取出一個字符與$res字符串連接
  $chars += 1;  // 截取到的字符數+1
  $offset += $count;  // 截取高位偏移量向後移$count字節
 }
 return $res;
}

echo utf8sub($str,100);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved