我有以下代码:
header('Content-type: text/html; charset=utf-8');
$str = 'áá áá';
echo $str."\n";
echo mb_convert_case($str, MB_CASE_TITLE)."\n";
echo bin2hex($str)."\n";
echo bin2hex(mb_convert_case($str, MB_CASE_TITLE))."\n";
使用PHP 5.2.2,我得到以下输出:
áá áá
áá áá
c3a1c3a120c3a1c3a1
c3a1c3a120c3a1c3a1
使用PHP 5.4.3,我得到了这个:
áá áá
á� á�
c3a1c3a120c3a1c3a1
c3a1e3a120c3a1e3a1
我在两种情况下的预期输出都是:
áá áá
Áá Áá
c3a1c3a120c3a1c3a1
c381c3a120c381c3a1
所以我有两个问题:
答案 0 :(得分:6)
将$encoding
传递给mb_
函数的每次调用,或设置:
mb_internal_encoding("UTF-8");
确保PHP知道您正在使用的编码。否则,编码来自php.ini
,或默认的ISO-8859-1(如果不包括在内)。
因此,您的5.4安装默认为ISO-8859-1,因此会降低UTF-8序列的前导字节,从而打破它。在5.2中我也是如此,所以也许你的5.2安装还有别的东西 - internal_encoding
中的ini
可能被设置为其他没有字母的字节位置吗?