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);

时间: 2025-01-31 01:21:36

PHP正确解析UTF-8字符串的相关文章

如何用 Newtonsoft.Json 正确解析属性为“接口集合&amp;amp;lt;接口&amp;amp;gt;”的JSON字符串

问题描述 如何用Newtonsoft.Json正确解析属性为"接口集合<接口>"的字符串我想要能够正确解析CC类,也就是其属性是IList<I>,都是接口类型的.请注意,DD类中可能还继续包含更深层次的集合接口.比如DD还包含D3是IList<IDD4>.//CCocc=JsonConvert.DeserializeObject<CC>(s);//提示错误:Errorsettingvalueto'C3'on'ConsoleApplicat

如何解析嵌套Json字符串,不使用第三方JAR

问题描述 如何解析嵌套Json字符串,不使用第三方JAR 如何解析嵌套Json字符串,不使用第三方JAR,JSON格式{"id":"idValue","name":"nameValue","aBean":"[{....},{....},{....}]"}菜鸟一枚,没有分数--! 解决方案 不使用第三方JAR~!~这么叼,,,, 1 把第一个{ 和最后一个 }去掉. 2 以 逗号为分隔符,

php代码嵌入在html中,正确解析不了

问题描述 php代码嵌入在html中,正确解析不了 我刚学php,已经搭建了Apache服务器,php也能正常显示.代码如下: 执行完后,显示结果如下: 查了资料说是,服务器搭建错误,解析不了php代码,我试着有该为如下: 则执行结果正确,没有了后面的单引号等. 各位大神告一下,这是哪里配置错误了. 刚学php,多谢了. 我在htdocs下写了index.html <?php phpinfo(); ?> 执行:localhost,显示正确. 解决方案 写一个index.php,写入 <?

json解析-安卓联网解析长JSON字符串

问题描述 安卓联网解析长JSON字符串 接口地址:http://api.k780.com:88/?app=weather.city&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json 代码: package com.example.cityinfo; import java.util.ArrayList; import org.json.JSONArray; import org.json.JSON

json-C#怎么解析一段字符串

问题描述 C#怎么解析一段字符串 我的字符串格式是这样的,也可以说是Json字符串,有没有什么方法可以把这段字符串给解析成成实体类,求大神指教啊 [{"OrderID":"0","No":"1","Item1":"0","Item2":"600","Item3":"100","Item4"

对企业内网安全规划方向的正确解析

以下的文章主要想大家讲述的是企业内网安全的规划方向,如果你对企业内网安全的规划方向,心存好奇的话,以下的文章将会揭开它的神秘面纱.计算机和网络的安全问题不断加重,安全人员唯有再三谨慎,做好基本的安全流程,吸收和应用 各类产品最新的解决方案后.欲善其事,先利其器计算机和网络的安全问题不断加重,安全人员唯有谨慎再三,做好基本的安全流程,吸收和应用各类产品最新的解决方案后.及时了解工作环境和终端需求,定制基于本地和网络的防护软体并制定适合的策略;调配系统和用户的权限问题;备份和加密重要的数据资料;建立

PHP正确解析UTF-8字符串技巧应用_php基础

在<学习PHP&MYSQL之--字符编码篇(一)>中介绍了Unicode与UTF-8的转换关系,总结了一个UTF-8的编码规则,根据这个编码规则,写一个UTF-8编码的解析程序,以下是PHP的实现: 复制代码 代码如下: <?php /* 程序功能,$str是中英文混合的UTF-8编码字符串, 将此字符串根据UTF-8的编码规则正确的解码并显示. */ $str = '今天非常Happy,所有决定去KFC吃可乐鸡翅!!!'; /* $str 是待截取的字符串 $len 是截取的字

javascript中如何正确将日期(Date)字符串转换为日期(Date)对象?

因近日一个项目中要在客户端判断用户输入的日期字符串的大小,所以对日期字符串转日期对象研究了一下,测试代码如下:   <script. type="text/javascript"> var sDate1 = "2008/04/02"; var sDate2 = "2005/03/01"; var oDate1 = new Date(sDate1); var oDate2 = new Date(sDate2); if (oDate1 &

用XMLHTTP组件正确解析图片地址并将其保存

现在基于WEB页的HTML的编辑器在新闻系统,文章系统中用得越来越广,一个网页一粘就可以保持原来的样式,同时图片也可以在这个页中保持.但是在使用过程中,如果所粘贴页中的图片被删除,就会在自己的页面上留下一个大大的"X",影响美观.以前只好把这个图片保存下来,再重新上传到服务器上,这样实在麻烦.能不能让服务器自动去下载图片保存在服务器并且替换页面上的链接?答案是肯定的.要实现这个功能需要经过三个步骤:一,取得原页中的图片的地址.方法很多,可以用分割字符串,也可以用正则匹配.实践证明用正则