为什么这不能按预期工作:
echo str_replace("é","é","Fédération Camerounaise de Football");
结果:
"Fédération Camerounaise de Football"
我期望有:
"Fédération Camerounaise de Football"
解决方法:
你做错了.该字符串不正确,需要替换,仅使用UTF-8进行编码.
您所要做的就是utf8_decode(‘FédérationCamerounaise de Football’).
更新:
您正在看到Camerunaise deFédération作为输出,因为您正在以UTF-8格式两次传递数据.
观察:
以UTF-8格式保存的file1.php:
echo "Fédération Camerounaise de Football";
输出:
Fédération Camerounaise de Football
现在,如果您告诉浏览器您正在使用UTF-8,它将直接显示内容:
以UTF-8格式保存的file2.php:
header('Content-Type: text/html; charset=utf-8');
echo "Fédération Camerounaise de Football";
输出:
Fédération Camerounaise de Football
完善.
但是,您做的事情甚至更糟.您具有UTF-8编码的字符串,并且正在通过将其写入UTF-8编码的文件来再次对其进行编码.
以UTF-8格式保存的file3.php:
echo "Fédération Camerounaise de Football";
输出:
Fédération Camerounaise de Football
真是一团糟.让我们看是否可以用str_replace修复它,使情况变得更糟:
以UTF-8格式保存的file4.php:
echo str_replace("é","é","Fédération Camerounaise de Football");
输出:
Fédération Camerounaise de Football
如您所见,我们对其进行了“修复”.有点.那就是你在做什么.您正在将ƒƒ转换为é,尽管您没有看到它,因为您的编辑器不允许您看到编码背后的真实符号,但浏览器却可以.
让我们使用ASCII重试一次:
以ASCII格式保存的file5.php:
echo str_replace("é","é","Fédération Camerounaise de Football");
输出:
Fédération Camerounaise de Football
魔法!浏览器现在拥有所有功能.但是真正的解决方案是什么?好.如果您的PHP文件中有一个硬编码的字符串,那么您应该只编写Camerunaise de Football足球联合会,而不要把这该死的事情弄错了.但是,如果要从另一个文件或数据库中获取它,则应选择以下两个课程之一:
>使用utf8_decode()将获取的数据转换为所需的输出.
>不进行任何转换,而是使用header(‘Content-Type:text / html; charset = utf-8’);告诉浏览器您正在以UTF-8格式打印内容,因此它将正确显示内容.
标签:character-encoding,utf-8,php,internationalization
来源: https://codeday.me/bug/20191029/1958304.html