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 相关文章推荐
php 上传功能实例代码
Apr 13 PHP
基于curl数据采集之正则处理函数get_matches的使用
Apr 28 PHP
LotusPhp笔记之:Cookie组件的使用详解
May 06 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 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导入导出excel实例
2013/10/25 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
利用python如何在前程无忧高效投递简历
2019/05/07 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
详解Python3 pickle模块用法
2019/09/16 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
苹果台湾官网:Apple台湾
2019/01/05 全球购物
医学生自我鉴定范文
2013/11/08 职场文书
大学生工作推荐信范文
2013/12/02 职场文书
总经理驾驶员岗位职责
2013/12/04 职场文书
七年级政治教学反思
2014/02/03 职场文书
学生会招新策划书
2014/02/14 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang