场景一:
header("Content-Type: text/html;charset=utf-8"); $str1=$data[0] //从数据库读出的值为"后勤保障部"; $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."</br>"; echo "str2='".$str2."'".": 字符长度:".mb_strlen($str2).": 字节长度:".strlen($str2)." 编码:".$encode2."</br>"; //剔除str1字串中非中文 preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str1, $matches); $str1 = join('', $matches[0]); echo "</br>---------------------剔除str1字串中非中文后----------------------</br>"; echo "str1='".$str1."'".": 字符长度:".mb_strlen($str1).": 字节长度:".strlen($str1)." 编码:".$encode1."</br>"; echo "str1 与 str2比较: "; echo strcomp($str1,$str2)."</br>";
场景二:
知道BOM问题,解决方案如下:
//去除BOM function removeBom($string){ if (substr($string, 0, 3) == pack("CCC", 0xef, 0xbb, 0xbf)) { return substr($string, 3); } return $string; } //转化为统一编码; function ConvertUTF8ToGB2312($str){ return iconv("UTF-8", "GB2312//IGNORE", $str); }
场景三:
为了查出隐藏的特殊字符,使用 bin2hex()
函数查看字符串的二进制表示,这有助于发现隐藏的特殊字符。
对比str1和str2 var_dump(bin2hex($str1)); var_dump(bin2hex($str1)); 截取相关的字符串; $hf_last_str = substr($str1, 3); 再次对不 strcmp($str1,$str2)