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中的串行化变量和序列化对象
Sep 05 PHP
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 PHP
php生成二维码时出现中文乱码的解决方法
Dec 18 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
php实现Session存储到Redis
Nov 11 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
Mar 07 PHP
php 浮点数比较方法详解
May 05 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 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
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
原生js调用json方法总结
2018/02/22 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Django在win10下的安装并创建工程
2017/11/20 Python
Python笔记之工厂模式
2019/11/20 Python
python实现超市商品销售管理系统
2019/11/22 Python
基于python plotly交互式图表大全
2019/12/07 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
Jupyter加载文件的实现方法
2020/04/14 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
本科毕业自我鉴定
2014/03/20 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
小学运动会口号
2014/06/07 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
房贷收入证明范本
2015/06/12 职场文书
高一作文之乐趣
2019/11/21 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
2022微信温控新功能上线
2022/05/09 数码科技