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 高手之路(一)
Oct 09 PHP
一篇有意思的技术文章php介绍篇
Oct 26 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
php实现邮件发送并带有附件
Jan 24 PHP
PHP使用CURL_MULTI实现多线程采集的例子
Jul 29 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
PHP生成RSS文件类实例
Dec 05 PHP
PHP递归调用数组值并用其执行指定函数的方法
Apr 01 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
PHP filesize函数用法浅析
Feb 15 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生成数组再传给js的方法
2014/08/07 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
编写Python CGI脚本的教程
2015/06/29 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
敏捷开发的主要原则都有哪些
2015/04/26 面试题
家长对孩子的感言
2014/03/10 职场文书
企业年会主持词
2014/03/27 职场文书
保护环境演讲稿
2014/05/10 职场文书
财政局个人年终总结
2015/03/03 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
七一表彰大会简报
2015/07/20 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
商业计划书之服装
2019/09/09 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
vue实现拖拽交换位置
2022/04/07 Vue.js