我对 UTF-8 和 mb_strtoupper 有疑问。
mb_internal_encoding('UTF-8');
$guesstitlestring='Le Courrier de Sáint-Hyácinthe';
$encoding=mb_detect_encoding($guesstitlestring);
if ($encoding!=='UTF-8') $guesstitlestring=mb_convert_encoding($guesstitlestring,'UTF-8',$encoding);
echo "DEBUG1 $guesstitlestring\n";
$guesstitlestring=mb_strtoupper($guesstitlestring);
echo "DEBUG2 $guesstitlestring\n";
结果:
DEBUG1 Le Courrier de Sáint-Hyácinthe
DEBUG2 LE COURRIER DE S?INT-HY?CINTHE
我不明白为什么会这样?我正在尝试尽可能小心地使用编码。该字符串首先作为 UTF-8 给出,经过验证并可能重新转换为 UTF-8。这是一场噩梦!
更新
所以我发现这是由我通过控制台输入参数和从控制台返回的参数组合引起的。因此,他们在进出时都出现了乱码。解决方案是不以这种方式输入任何参数,或者以这种方式取出参数。
感谢大家帮助解决这个问题!