解决PHP trim()rtrim()ltrim()替换中文汉字乱码(�)的问题
代码示例如下:
echo rtrim('栾城县','县');
输出:
栾�
原因:
rtrim函数把参数都转成了UTF8后再进行比较。
对于中文,一般都是先转成Unicode,再根据下表转成UTF8。
UCS-4(UNICODE)编码 UTF-8字节流
U-00000000 – U-0000007F 0xxxxxxx
U-00000080 – U-000007FF 110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
解决方法
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
$str = '栾城县'; // 假设要替换掉“县”字 var_dump(mb_substr($str,0,-1,'utf-8')); // 或者 var_dump(mb_substr($str,0,mb_strpos($str,'县'),'utf-8')); // 或者 如果为了防止替换了“栾县城”这样的字符 // 可以从最右边开始替换,这样需要做一些判断 $len = strlen($str); $len2 = mb_strpos($str,'县'); if($len == $len2 + 1){ var_dump(mb_substr($str,0,$len2,'utf-8')); }else{ echo '不符合替换规则 >> ' . $str; } |