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脚本
Nov 26 PHP
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
php自动加载机制的深入分析
Jun 08 PHP
php遍历文件夹和文件列表示例分享
Mar 11 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
php递归遍历删除文件的方法
Apr 17 PHP
基于PHP制作验证码
Oct 12 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 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里的中文变量说明
2011/07/23 PHP
destoon常用的安全设置概述
2014/06/21 PHP
PHP中比较时间大小实例
2014/08/21 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
JQuery里选择超链接的实现代码
2011/05/22 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
理解Javascript闭包
2013/11/01 Javascript
jquery中交替点击事件的实现代码
2014/02/14 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
[03:48]大碗DOTA
2019/07/25 DOTA
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
Python tkinter模版代码实例
2020/02/05 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
Python网页解析器使用实例详解
2020/05/30 Python
详解python算法常用技巧与内置库
2020/10/17 Python
python的dict判断key是否存在的方法
2020/12/09 Python
应届生程序员求职信
2013/11/05 职场文书
应届毕业生自我鉴定范文
2013/12/27 职场文书
擅自离岗检讨书
2014/02/11 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
JS函数式编程实现XDM一
2022/06/16 Javascript
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android