Ala*_*air 6 php utf-8 mbstring
我有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";
Run Code Online (Sandbox Code Playgroud)
结果:
DEBUG1 Le Courrier de Sáint-Hyácinthe
DEBUG2 LE COURRIER DE S?INT-HY?CINTHE
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样?我正在尝试尽可能小心地使用编码.该字符串首先作为UTF-8给出,经过验证并可能重新转换为UTF-8.这是一场噩梦!
UPDATE
所以我发现这是由于我通过控制台输入参数和从控制台返回的参数的组合引起的.所以他们在前进和出路的路上都是乱码.解决方案是不以这种方式输入任何参数,或以这种方式获取参数.
感谢大家帮忙解决这个问题!
取而代之的strtoupper()/mb_strtoupper()使用mb_convert_case(),因为大写转换是在不同的编码非常棘手的,还请确保您的字符串是UTF-8.
$content = 'Le Courrier de Sáint-Hyácinthe';
mb_internal_encoding('UTF-8');
if(!mb_check_encoding($content, 'UTF-8')
OR !($content === mb_convert_encoding(mb_convert_encoding($content, 'UTF-32', 'UTF-8' ), 'UTF-8', 'UTF-32'))) {
$content = mb_convert_encoding($content, 'UTF-8');
}
// LE COURRIER DE SÁINT-HYÁCINTHE
echo mb_convert_case($content, MB_CASE_UPPER, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
工作示例:http://3v4l.org/enEfm#v443
另见我在PHP网站上关于转换器的评论:http://www.php.net/manual/function.utf8-encode.php#102382