解决php字符串一样但长度不等的问题

解决php字符串长度不等的方法:首先通过“mb_detect_encoding()”函数查看两个字符串的编码方式;然后查看具体字符长度;最后剔除非中文字符即可。

解决php字符串一样但长度不等的问题

问题:

这里写图片描述

如图所示 咋眼看去两个一样的中文字符串“后勤保障部”,但一个长度为21 一个为15。

首先直觉可能会认为是编码方式不一样导致的,
通过mb_detect_encoding()函数查看两个字符串的编码方式 代码如下

立即学习“PHP免费学习笔记(深入)”;

<?phpheader ("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

这里写图片描述

那么是什么原因呢 ,我们在输出看下具体字符长度

<?phpheader ("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]);

登录后复制

最终代码如下

<?phpheader ("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中文网!

以上就是解决php字符串一样但长度不等的问题的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2134141.html

(0)
上一篇 2025年2月24日 23:55:18
下一篇 2025年2月24日 23:55:43

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • linux php如何安装mysql数据库

    linux php安装mysql数据库的方法:首先关闭linux的防火墙;然后从mysql官网上下载自己适合的mysql版本;接着在mysql当前目录下设定目录的访问权限;最后查看mysql状态即可。 1、首先关闭linux的防火墙,执行命…

    2025年2月24日 编程技术
    200
  • php怎么判断0不等于空

    php不等于空的判断方法:首先创建一个PHP示例文件;然后用foreach循环方法以及empty和“is_numeric”等函数实现不等于空的判断逻辑;最后执行该文件即可。 PHP 判断0不为空 判断0为空或者是数字,这样就不会将0视作空了…

    2025年2月24日
    200
  • PHP如何生成指定范围内的N个不重复的随机数?

    PHP生成指定范围内的N个不重复的随机数的方法:首先把指定范围内的数值存进数组;然后再使用【shuffle($array)】打乱这个数组;最后再截取其中一定数量的值即可。 PHP生成指定范围内的N个不重复的随机数的方法: 思路:将生成的随机…

    2025年2月24日
    200
  • php base64乱码怎么办

    php base64乱码是因为有一些中文字符,用GET形式传过来的时候,“+”号会被替换成空格而导致乱码的,其解决办法就是进行替换再解密即可。 PHP base64编码后解码乱码的解决办法 这篇文章主要介绍了PHP base64编码后解码乱…

    2025年2月24日
    200
  • php环境搭建的一键安装包有哪些?

    php环境搭建的一键安装包有:1、XAMPP是一款功能强大的一键安装环境;2、PhpStudy是支持Win10并且对于PHP7的支持也是不错;3、Appserv是一款在Windows下的PHP一键安装环境。 php环境搭建的一键安装包有: …

    2025年2月24日 编程技术
    200
  • php按钮页面跳转页面的实现方法

    php按钮跳转页面的实现方法:首先创建一个代码示例文件;然后输入语句“echo “”;最后在浏览器中执行该文件即可。 页面跳转一般是在静态页面做,php主要做功能开发。 如果真是要用php实现,可以试试下面方法: <?ph…

    2025年2月24日
    200
  • 解决解密PHP加密文件后汉字乱码的方法

    解密PHP加密文件后汉字乱码的解决方法:1、需要再次上传解密后的文件再次解密;2、查看编辑器对中文是否支持,并修改编辑器设置即可解决。 一种情况是部分文件可能加密了两次,解密后仍然为加密状态,您需要再次上传解密后的文件再次解密。 另一种情况…

    2025年2月24日
    200
  • ubuntu php curl安装的步骤方法

    ubuntu php curl安装的方法:首先打开终端窗口;然后输入命令“# sudo apt-get install curl libcurl3 libcurl3-dev php7.0-curl”并执行即可安装完成。 ubuntu 16.…

    2025年2月24日
    200
  • php怎么修改ini文件

    php修改ini文件的方法:首先在PHP目录文件下找到并打开“php.ini”文件;然后按住“ctrl+F”快捷键找到需要修改的配置项;接着去掉配置项前面的注释;最后修改需要的数值并保存即可。 php修改ini文件 找到php.ini文件,…

    2025年2月24日
    200
  • php不显示html怎么办

    php不显示html是因为没有关闭标签导致的,其解决办法就是重新写入完整的html代码为“ .class{backgroundcolor:red;}”即可。 php中的html代码无法显示 问题代码如下: .class{background…

    2025年2月24日
    200

发表回复

登录后才能评论