今天面试,有一道题,要求截取中文字符无乱码。

当时因为要赶去另一家去面试,没有仔细分析。

虽然现在供职的这家公司b2c项目正在用,因为当时赶项目,是网上拿来直接用的。

回来以后再重新整理了一下。

代码贴出来:

<?php
header("Content-Type:text/html; charset=utf-8");
function utf8_substr($str,$len){for($i=0;$i<$len;$i++){$temp_str=substr($str,0,1);if(ord($temp_str) > 127){if($i<$len){$new_str[]=substr($str,0,3);$str=substr($str,3);}}else {$new_str[]=substr($str,0,1);$str=substr($str,1);}}return join($new_str);
}
?>

ord()返回字符串第一个字符的ascii值,因为英文,数字及特殊字符的ascii码都不大于127,

ord()>127即可判断是中文。在utf8中,中文占3个字节所以遇到中文字符,用三个字节当一个字节即可。

strlen("你好");输出6,可以验证这一点。

如果是gbk则中英文都占2个字节;但是strlen("ab")英文字符都返回2个长度。

strlen("你好");gbk返回4,utf8返回6; mb_strlen("你好","gbk");返回2;mb_strlen("你好","utf-8");返回2。

所以如果是gbk只需要截取将3变成2即可。

要注意:计算总长的时候一定要用mb_strlen() [截取的时候不用]

也可以用

string mb_strcut ( string $str , int $start [, int $length [, string $encoding ]] )

string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

int mb_strlen ( string $str [, string $encoding ] )

继续面试题,将字符翻转包括中英文

如果对php比较熟悉,很容易想到的是strrev(),但是很不幸,strrev翻转中文会乱码。

也有人会想到:

$arr = explode('',$str);
$temp = array_reverse($arr);
implode('',$temp);

很不幸,explode用''做分割,js可以。

对于中文,utf-8编码:

function reverse($str)
{$ret = "";  $len = mb_strlen($str,"utf-8");for($i=0; $i< $len; $i++){echo $i;$arr[] = mb_substr($str, $i, 1, "utf-8");}return implode("", array_reverse($arr));
}
print_r(reverse("你好"));

用mb_strlen();对于这个mb_strwidth();会把中文的字符算为2。循环会空转。

中间可以加上:

if(strlen($str)==mb_strlen($str)){return strrev($str);
}

转载于:https://www.cnblogs.com/simpman/p/3187420.html

php截取字符串,无乱码相关推荐

  1. php 中文字符串截取无乱码,php实现中文字符串无乱码截取

    在PHP开发中会经常用到字符串截取,有的时候字符串截取会出现乱码的情况,那么怎么解决这个问题呢,其实也很容易 首先我们要了解关于中英文占多少字节的问题. ASCII码:一个中文汉字占两个字节的空间. ...

  2. php解析乱码字符串,PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]

    在PHP中,使substr函数截取字符串末位会出现乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位不准确,造成断开的字符会把其后的..拉过来一起做一个字,所 ...

  3. php中文截取无乱码,PHP截取中文无乱码_PHP教程

    这段代码好像是thinkphp里面的 /** +-------------------- * 字符串截取,支持中文和其他编码 +-------------------- * @static * @ac ...

  4. PHP实现中文字符串截取无乱码

    在我们学习PHP知识的过程中,PHP截取字符串应该是一个非常常见的字符串基础操作了,想必大家都比较熟悉这方面知识点.但是有些新手朋友们可能遇到过,当截取中英文字符串时出现乱码的情况,其实这个也是非常容 ...

  5. 实现中文字符串截取无乱码的方法

    小伙伴们大家好,使用substr()截取中文字符乱码的问题怎么解决呢? 看下面的方法: 方法一: 使用php内置函数mb_substr():      mb_substr( $str, $start, ...

  6. PHP 实现中文截取无乱码的方法

    PHP 实现中文截取无乱码的方法 需知: 中文字符在gbk编码下为2个字符,utf-8下为3个字符 中文字符的ASCII值是从0xa0后开始的 通过ord()函数可以返回字符串中第一个字符的ASCII ...

  7. php 中文截断,PHP中实现中文字串截取无乱码的解决方法

    在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节, ...

  8. php 中英文截取 php,PHP 中英文截取无乱码

    在学习MySql 字符集时,解决了PHP中英文截取无乱码的问题.这个方法的核心在于判断取多少个字节上. //PHP中英文截取无乱码 header('Content_type=text/php;char ...

  9. smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty。...

    smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty. function smarty_modifier_trunca ...

最新文章

  1. bzoj 2157 旅行
  2. 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...
  3. 杭电acm 2024 C语言合法标识符
  4. DMA(direct memory access)控制方式
  5. Visual Assist插件使用的一些相关文章
  6. 岁月的脚步,被时间冲刷——如何修复EM ?
  7. python查询手册_Python 手册
  8. linux学习笔记【转】
  9. python爬取cnnvd,粘贴可用
  10. 摄影后期从入门到精通(一)
  11. Vue使用Iconfont图标库
  12. vim 修改注释颜色 tab键
  13. 如何阻止windows 联网自动激活,避免笔记本无法退货。
  14. 超级教程推荐给大家一个方便简单操作的内网穿透软件frp穿透青龙面板
  15. excel数学分析相关知识
  16. 如何恢复硬盘数据,包括硬盘文件名乱码
  17. 【知识产权之专利权】不定项选择题和判断题题库
  18. 文件拖到ads快捷方式打不开
  19. 社区运营秘笈:病毒式营销!
  20. 2021湖南省地区高考成绩排名查询,2021长沙市地区高考成绩排名查询,长沙市高考各高中成绩喜报榜单...

热门文章

  1. java 权限管理与用户角色权限设计
  2. 推荐一款思维在线思维导图,为什么?
  3. mybatis中使用SqlSessionManager进行insert操作
  4. Ubuntu 下安装tomcat和配置eclipse的遇到的问题的一点心得。
  5. 《深入剖析Nginx》一2.5 加桩调试
  6. MySQL 三种关联查询的方式: ON vs USING vs 传统风格
  7. 从零开始山寨Caffe·贰:主存模型
  8. 我所想的GIX4的权限
  9. Biztalk2009安装全过程截图,x64平台需要手动更改运行模式
  10. Linux 命令(94)—— env 命令