前言
网上流传着这么一个腾讯笔试题:
PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换。
举个例子,我们直接对中英文混排的字符串处理是会出乱码的,如:
我们知道中文在 UTF8 编码里是由3个字符组成的,那么换个思路,我们可以把一个中文当成3个字符来处理,同理再换个思路,在一个把小写英文转换成大写英文的函数里,我们要处理 的只有小写字母,那么我们就可以对一个字符串逐个字符进行处理,只处理小写字母,那么如何判断一个字符是小写字母呢,当然是用 ascii 码了,使用 linux 或者 mac os (实际上也为 linux 系统)的朋友可以直接使用命令 man ascii 查看字符 ascii 码对应值:
由 ascii 表我们看出英文小写字母的ascii 值在 97 ~ 122 之间,由此可得出我们的程序:
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);
输出结果 :
origin string:a中你继续F@#$%^&*(BMDJFDoalsdkfjasl
result string:string(39) "A中你继续F@#$%^&*(BMDJFDOALSDKFJASL"
参考链接:https://www.cnblogs.com/wydchn/articles/4952205.html