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 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
第三章 php操作符与控制结构代码
Dec 30 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
解析strtr函数的效率问题
Jun 26 PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 PHP
PHP+MySQL插入操作实例
Jan 21 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
Jul 08 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
2016/12/09 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
学习ExtJS border布局
2009/10/08 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
JS重要知识点小结
2011/11/06 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
技校生自我鉴定范文
2013/09/26 职场文书
应届大学生求职的自我评价
2013/11/17 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
教师专业自荐书范文
2014/02/10 职场文书
厂长岗位职责
2014/02/19 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
初中重阳节活动总结
2015/05/05 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书