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中英混合字符串截取函数代码
Jul 17 PHP
PHP JS Ip地址及域名格式检测代码
Sep 27 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
PHP随机生成信用卡卡号的方法
Mar 23 PHP
Yii2实现ajax上传图片插件用法
Apr 28 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
php TP5框架生成二维码链接
Apr 01 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
php之CodeIgniter学习笔记
2013/06/17 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
javascript 贪吃蛇实现代码
2008/11/22 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
用Python写一个无界面的2048小游戏
2016/05/24 Python
python获取Pandas列名的几种方法
2019/08/07 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
EJB3.1都有哪些改进
2012/11/17 面试题
房屋租赁合同解除协议书
2014/10/11 职场文书
机关作风建设整改方案
2014/10/27 职场文书
首席执行官观后感
2015/06/03 职场文书
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
Redis基本数据类型String常用操作命令
2022/06/01 Redis