解决PHP截取中文字符串问题
时间:2011-04-06
来源:互联网
解决PHP截取中文字符串问题
PHP截取字符串如果是英文那很好办,直接用substr就行了,一般不会出现乱码.中文就有点麻烦了.
下面给出两种解决办法:
(一)直接使用Multi-Byte函数库的mb_substr();函数就行了,实例代码如下
- <?php
- echo mb_substr($str, $start, $length, $encoding);
- echo "<br />";
- ?>
(二)自定义截取中文字符串函数,基本上就是仿照mb_substr写个函数,直接调用罢了,以下为我找到的代码,其实很简单
- <?php
- function substr_cn($string_input,$start,$length)
- {
- /* 功能:
- * 此算法用于截取中文字符串
- * 函数以单个完整字符为单位进行截取,即一个英文字符和一个中文字符均表示一个单位长度
- * 参数:
- * 参数$string为要截取的字符串,
- * 参数$start为欲截取的起始位置,
- * 参数$length为要截取的字符个数(一个汉字或英文字符都算一个)
- * 返回值:
- * 返回截取结果字符串
- * */
- $str_input=$string_input;
- $len=$length;
- $return_str="";
- //定义空字符串
- for ($i=0;$i<2*$len+2;$i++)
- $return_str=$return_str." ";
- $start_index=0;
- //计算起始字节偏移量
- for ($i=0;$i<$start;$i++)
- {
- if (ord($str_input{$start_index}>=161)) //是汉语
- {
- $start_index+=2;
- }
- else //是英文
- {
- $start_index+=1;
- }
- }
- $chr_index=$start_index;
- //截取
- for ($i=0;$i<$len;$i++)
- {
- $asc=ord($str_input{$chr_index});
- if ($asc>=161)
- {
- $return_str{$i}=chr($asc);
- $return_str{$i+1}=chr(ord($str_input{$chr_index+1}));
- $len+=1; //结束条件加1
- $i++; //位置偏移量加1
- $chr_index+=2;
- continue;
- }
- else
- {
- $return_str{$i}=chr($asc);
- $chr_index+=1;
- }
- }
- return trim($return_str);
- }//end of substr_cn
- ?>
作者: 听老歌 发布时间: 2011-04-06
我的做法一般是先urlencode之后再进行,sbustr()
作者: a.a 发布时间: 2011-04-06
本帖最后由 stabilization 于 2011-04-06 17:40 编辑
俺和楼上同做法
但是是substr
俺和楼上同做法
但是是substr

作者: stabilization 发布时间: 2011-04-06
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28