十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容主要讲解“php字符串长度不一致如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php字符串长度不一致如何解决”吧!
创新互联建站主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务双阳,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
php字符串长度不一致的解决办法:1、通过mb_detect_encoding()函数查看字符串的编码方式;2、通过mb_strlen函数查看具体字符长度;3、使用正则表达式“preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str1, $matches);”剔除非中文字符即可。
问题:
如图所示 咋眼看去两个一样的中文字符串“后勤保障部”,但一个长度为21 一个为15。
首先直觉可能会认为是编码方式不一样导致的,
通过mb_detect_encoding()
函数查看两个字符串的编码方式 代码如下
header("Content-Type: text/html;charset=utf-8");
$data[0]=$str1="后勤保障部";
$data[1]=$str2="后勤保障部";
var_dump($data);
//查看编码方式
$encode1 = mb_detect_encoding($str1, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
$encode2 = mb_detect_encoding($str2, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
echo "str1='".$str1."'"." 编码:".$encode1."";
echo "str2='".$str2."'"." 编码:".$encode2."";
?>
但输出结果都是UTF-8
那么是什么原因呢 ,我们在输出看下具体字符长度
header("Content-Type: text/html;charset=utf-8");
$data[0]=$str1="后勤保障部";
$data[1]=$str2="后勤保障部";
var_dump($data);
//查看编码方式
$encode1 = mb_detect_encoding($str1, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
$encode2 = mb_detect_encoding($str2, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
//当mb_strlen的内码选择为UTF-8的时候,则会将中文字符当成一个字符
//strlen,得到的是字符串所占的字节数
echo "str1='".$str1."'".": 字符长度:".mb_strlen($str1).": 字节长度:".strlen($str1)." 编码:".$encode1."";
echo "str2='".$str2."'".": 字符长度:".mb_strlen($str2).": 字节长度:".strlen($str2)." 编码:".$encode2."";
?>
输出结果如下:
发现字符串str1有7个中文字符,但实际只显示了5个,也就是“后勤保障部”
通过截取str1最后两个字符查看
//截取str1后面两个未显示字符
$res=mb_substr($str1, 5,2);
echo "最后两字符:".$res."";
echo mb_strlen($res);
无法echo显示,但确实占有两个字符
如果实际要求这看上去一样的字符串就相等的话,需要进行处理,处理就是剔除非中文字符:
//剔除str1字串中未显示的字符(非中文字符)
preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str1, $matches);
$str1 = join('', $matches[0]);
最终代码如下
header("Content-Type: text/html;charset=utf-8");
$data[0]=$str1="后勤保障部";
$data[1]=$str2="后勤保障部";
var_dump($data);
//查看编码方式
$encode1 = mb_detect_encoding($str1, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
$encode2 = mb_detect_encoding($str2, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
//当mb_strlen的内码选择为UTF-8的时候,则会将中文字符当成一个字符
//strlen,得到的是字符串所占的字节数
echo "str1='".$str1."'".": 字符长度:".mb_strlen($str1).": 字节长度:".strlen($str1)." 编码:".$encode1."";
echo "str2='".$str2."'".": 字符长度:".mb_strlen($str2).": 字节长度:".strlen($str2)." 编码:".$encode2."";
//截取str1后面两个未显示字符
echo "------------------截取str1后面两个未显示字符---------------------";
$res=mb_substr($str1, 5,2);
echo "str1最后两字符: ".$res."";
echo "str1长度: ".mb_strlen($res)."";
//比较
echo "--------------------------相等比较----------------------------------";
echo "str1 与 str2比较: ";
echo strcomp($str1,$str2)."";
echo "str2 与 str2比较: ";
echo strcomp($str2,$str2)."";
//剔除str1字串中非中文
preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str1, $matches);
$str1 = join('', $matches[0]);
echo "---------------------剔除str1字串中非中文后----------------------";
echo "str1='".$str1."'".": 字符长度:".mb_strlen($str1).": 字节长度:".strlen($str1)." 编码:".$encode1."";
echo "str1 与 str2比较: ";
echo strcomp($str1,$str2)."";
function strcomp($str1,$str2){
if($str1 == $str2){
return "相等";
}else{
return "不等";
}
}
?>
运行结果
注:
将21字节的str1复制到phpmyadmin的sql输入框,显示如下
嗯 就是多的那两个字符
到此,相信大家对“php字符串长度不一致如何解决”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!