php 解决substr()截取中文字符乱码问题


Posted in PHP onJuly 18, 2016

在php中如果我要用substr()截取字符串全英文的没问题,如果包括有中文或英文就会悲剧了,但大家也 别切我们可以使用其它办法来解决。

php截取中文字符串出现乱码,这是最近发现的事情,先前我曾经写过一篇关于自动生成meta信息的文章,那篇关于利用php截取文章前多少字作为description方法,但是出现了IE6无法加载CSS的现象,这里做一个补充。

首先要明确这么一个问题,之所以会出现IE6偶尔无法加载CSS的现象,是因为文件出现了乱码,导致后面的加载CSS的link无法被IE6正确解析。因此就看到了一个纯HTML页面,没有CSS,赤裸裸!明确了问题,剩下的问题就好解决了,就是防止乱码,既然万戈所提供的函数出现了乱码,就重新去找了一个php函数来解决这个乱码的问题。

substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题。

mb_substr()这个函数的用法与substr()相似,只是在最后要加入多一个参数,以设定字符串的编码。

通过这里大几就应该理解我改进万戈方法的原因了~~

下面再介绍几个更高级处理办法

例1

代码如下

function func_chgtitle($str,$len) { //$length我们允许字符串显示的最大长度 
 $tmpstr = "";
 $strlen = $len;
 for($i = 0; $i < $strlen; $i++) {
 if(ord(substr($str, $i, 1)) > 0xa0) {
 $tmpstr .= substr($str, $i, 2);
 $i++;
 } else
 $tmpstr .= substr($str, $i, 1);
 }
 return $tmpstr;
}

例2

字符串编码为UTF-8的,一个中文字符占三个字节:

public static function chinesesubstr($str, $start, $len) { // $str指字符串,$start指字符串的起始位置,$len指字符串长度

$strlen = $start + $len; // 用$strlen存储字符串的总长度,即从字符串的起始位置到字符串的总长度

代码如下

for($i = $start; $i < $strlen;) {
 if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { // 如果字符串中首个字节的ASCII序数
值大于0xa0,则表示汉字
 $tmpstr .= substr ( $str, $i, 3 ); // 每次取出三位字符赋给变量$tmpstr,即等
于一个汉字
 $i=$i+3; // 变量自加3
 } else{
 $tmpstr .= substr ( $str, $i, 1 ); // 如果不是汉字,则每次取出一位字符赋给
变量$tmpstr
 $i++;
 }
 }
 return $tmpstr; // 返回字符串
 }

通过本篇文章希望对大家的 PHP编程处理同样的问题有所帮助!

PHP 相关文章推荐
基于mysql的论坛(6)
Oct 09 PHP
PHP实现用户认证及管理完全源码
Mar 11 PHP
mysql+php分页类(已测)
Mar 31 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
PHP操作MongoDB GridFS 存储文件的详解
Jun 20 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
Mar 13 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
PHP正则表达式过滤html标签属性(DEMO)
May 04 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
thinkphp5实现微信扫码支付
Dec 23 PHP
Yii2中cookie用法示例分析
Jul 18 #PHP
PHP socket 模拟POST 请求实例代码
Jul 18 #PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 #PHP
yii2缓存Caching基本用法示例
Jul 18 #PHP
yii2.0实现创建简单widgets示例
Jul 18 #PHP
php cookie工作原理与实例详解
Jul 18 #PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 #PHP
You might like
PHP动态图像的创建
2006/10/09 PHP
PHP批量生成缩略图的代码
2008/07/19 PHP
php 删除无限级目录与文件代码共享
2008/11/22 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
菜单效果
2006/10/14 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
详解Vue方法与事件
2017/03/09 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
Python生成短uuid的方法实例详解
2018/05/29 Python
python pygame实现2048游戏
2018/11/20 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
Python通过format函数格式化显示值
2020/10/17 Python
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
高山背包:High Sierra
2017/11/23 全球购物
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
财务主管自我鉴定
2014/01/17 职场文书
体育口号大全
2014/06/18 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
养成教育工作总结
2015/08/13 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android
HDFS免重启挂载新磁盘
2022/04/06 Servers
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL