php strtolower中文乱码

PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换


原因是:中文是由多字节组成的,而只有英文系统的单个英文字符只有一个字节,所以该系统把中文的每一个字节都做了strtolower()处理,改变后的中文字节拼接在一起就成了乱码(新生成的编码映射对应的字符可能就不是中文了)


解决:用str_split(string string,intstring,intsplit_length = 1)按每个字节切割,像中文能切割成三个字节。对识别到的字节若是英文字母则进行转换。


function mystrtoupper($a){  

    $b = str_split($a, 1);  

    $r = '';  

    foreach($b as $v){  

        $v = ord($v);  

        if($v >= 97 && $v<= 122){  

            $v -= 32;  

        }  

        $r .= chr($v);  

    }  

    return $r;  

}  

 

 

$a = 'a中你继续F@#$%^&*(BMDJFDoalsdkfjasl';  

echo 'origin string:'.$a."\n";  

echo 'result string:';  

$r = mystrtoupper($a);  

var_dump($r);
2020-02-04 15:19:42
0