Rac*_*naa 3 php utf-8 internationalization character-encoding
为什么这不按预期工作:
echo str_replace("é","é","Fédération Camerounaise de Football");
Run Code Online (Sandbox Code Playgroud)
结果:
"Fédération Camerounaise de Football"
Run Code Online (Sandbox Code Playgroud)
我期待着:
"Fédération Camerounaise de Football"
Run Code Online (Sandbox Code Playgroud)
你做错了.这个字符串不正确,需要更换,只需用UTF-8编码.
你所要做的就是utf8_decode('Fédération Camerounaise de Football').
您看到的Fédération Camerounaise de Football是输出,因为您在UTF-8中双重传递数据.
注意:
file1.php以UTF-8格式保存:
<?php
echo "Fédération Camerounaise de Football";
Run Code Online (Sandbox Code Playgroud)
输出:
FédérationCasrounaise de Football
现在,如果您告诉浏览器您使用的是UTF-8,它应该直接显示内容:
file2.php以UTF-8格式保存:
<?php
header('Content-Type: text/html; charset=utf-8');
echo "Fédération Camerounaise de Football";
Run Code Online (Sandbox Code Playgroud)
输出:
FédérationCamerounaisede Football
完善.
不过,你做得更糟.您有一个UTF-8编码的字符串,并通过将其写入UTF-8编码文件再次对其进行编码.
file3.php以UTF-8格式保存:
<?php
echo "Fédération Camerounaise de Football";
Run Code Online (Sandbox Code Playgroud)
输出:
来自Camerounaise de Football的Fé©dé
真是一团糟.让我们更糟糕的是通过看,如果我们可以解决这个问题str_replace:
file4.php以UTF-8格式保存:
<?php
echo str_replace("é","é","Fédération Camerounaise de Football");
Run Code Online (Sandbox Code Playgroud)
输出:
FédérationCasrounaise de Football
如你所见,我们"修复"了它.有点.多数民众赞成你在做什么.您要变换é成é,即使你没有看到这一点,因为你的编辑器不会让你看到的编码背后真正的符号,但浏览器.
让我们用ASCII再试一次:
file5.php以ASCII格式保存:
<?php
echo str_replace("é","é","Fédération Camerounaise de Football");
Run Code Online (Sandbox Code Playgroud)
输出:
FédérationCamerounaisede Football
魔法!浏览器现在就搞定了一切.但是真正的解决方案是什么?好.如果你的PHP文件中有一个字符串硬编码,那么你应该简单地写,Fédération Camerounaise de Football而不是把该死的东西放错.但是如果你从另一个文件或数据库中获取它,你应该选择以下两个课程之一:
用于utf8_decode()将您获取的数据转换为所需的输出.
不要转换任何内容并使用header('Content-Type: text/html; charset=utf-8');告诉浏览器您正在以UTF-8格式打印内容,因此它将正确显示内容.
| 归档时间: |
|
| 查看次数: |
16740 次 |
| 最近记录: |