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 09 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
50个PHP程序性能优化的方法
Jun 02 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 PHP
Yii Framework框架开发微信公众平台示例
Apr 26 PHP
PHP手机号码及邮箱正则表达式实例解析
Jul 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 代码优化的42条建议 推荐
2009/09/25 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
基于jquery实现等比缩放图片
2014/12/03 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
Python模拟百度登录实例详解
2016/01/20 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
工商管理专业实习生自我鉴定
2013/09/29 职场文书
大学生村官心得体会范文
2014/01/04 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
董事长年会致辞
2015/07/29 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers