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生成自己的LOG文件
Oct 09 PHP
mysql5详细安装教程
Jan 15 PHP
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
php curl 伪造IP来源的实例代码
Nov 01 PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 PHP
Destoon模板制作简明教程
Jun 20 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
php实现简单的上传进度条
Nov 17 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 PHP
PHP字符串与数组处理函数用法小结
Jan 07 PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 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实现在站点里面添加邮件发送的功能
2020/04/28 PHP
php实现留言板功能
2017/03/05 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
parentElement,srcElement的使用小结
2014/01/13 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
jQuery知识点整理
2015/01/30 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
Python使用matplotlib绘制动画的方法
2015/05/20 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
python 处理string到hex脚本的方法
2018/10/26 Python
Python异常处理例题整理
2019/07/07 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
kfc实习自我鉴定
2013/12/14 职场文书
前台文员职责范本
2014/03/07 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
违反学校规则制度检讨书
2015/01/01 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js