php截取字符串,无乱码
今天面试,有一道题,要求截取中文字符无乱码。
当时因为要赶去另一家去面试,没有仔细分析。
虽然现在供职的这家公司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截取字符串,无乱码相关推荐
- php 中文字符串截取无乱码,php实现中文字符串无乱码截取
在PHP开发中会经常用到字符串截取,有的时候字符串截取会出现乱码的情况,那么怎么解决这个问题呢,其实也很容易 首先我们要了解关于中英文占多少字节的问题. ASCII码:一个中文汉字占两个字节的空间. ...
- php解析乱码字符串,PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
在PHP中,使substr函数截取字符串末位会出现乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位不准确,造成断开的字符会把其后的..拉过来一起做一个字,所 ...
- php中文截取无乱码,PHP截取中文无乱码_PHP教程
这段代码好像是thinkphp里面的 /** +-------------------- * 字符串截取,支持中文和其他编码 +-------------------- * @static * @ac ...
- PHP实现中文字符串截取无乱码
在我们学习PHP知识的过程中,PHP截取字符串应该是一个非常常见的字符串基础操作了,想必大家都比较熟悉这方面知识点.但是有些新手朋友们可能遇到过,当截取中英文字符串时出现乱码的情况,其实这个也是非常容 ...
- 实现中文字符串截取无乱码的方法
小伙伴们大家好,使用substr()截取中文字符乱码的问题怎么解决呢? 看下面的方法: 方法一: 使用php内置函数mb_substr(): mb_substr( $str, $start, ...
- PHP 实现中文截取无乱码的方法
PHP 实现中文截取无乱码的方法 需知: 中文字符在gbk编码下为2个字符,utf-8下为3个字符 中文字符的ASCII值是从0xa0后开始的 通过ord()函数可以返回字符串中第一个字符的ASCII ...
- php 中文截断,PHP中实现中文字串截取无乱码的解决方法
在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节, ...
- php 中英文截取 php,PHP 中英文截取无乱码
在学习MySql 字符集时,解决了PHP中英文截取无乱码的问题.这个方法的核心在于判断取多少个字节上. //PHP中英文截取无乱码 header('Content_type=text/php;char ...
- smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty。...
smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty. function smarty_modifier_trunca ...
最新文章
- bzoj 2157 旅行
- 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...
- 杭电acm 2024 C语言合法标识符
- DMA(direct memory access)控制方式
- Visual Assist插件使用的一些相关文章
- 岁月的脚步,被时间冲刷——如何修复EM ?
- python查询手册_Python 手册
- linux学习笔记【转】
- python爬取cnnvd,粘贴可用
- 摄影后期从入门到精通(一)
- Vue使用Iconfont图标库
- vim 修改注释颜色 tab键
- 如何阻止windows 联网自动激活,避免笔记本无法退货。
- 超级教程推荐给大家一个方便简单操作的内网穿透软件frp穿透青龙面板
- excel数学分析相关知识
- 如何恢复硬盘数据,包括硬盘文件名乱码
- 【知识产权之专利权】不定项选择题和判断题题库
- 文件拖到ads快捷方式打不开
- 社区运营秘笈:病毒式营销!
- 2021湖南省地区高考成绩排名查询,2021长沙市地区高考成绩排名查询,长沙市高考各高中成绩喜报榜单...