Php str_replace无法使用特殊字符

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)

Hav*_*ard 8

你做错了.这个字符串不正确,需要更换,只需用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而不是把该死的东西放错.但是如果你从另一个文件或数据库中获取它,你应该选择以下两个课程之一:

  1. 用于utf8_decode()将您获取的数据转换为所需的输出.

  2. 不要转换任何内容并使用header('Content-Type: text/html; charset=utf-8');告诉浏览器您正在以UTF-8格式打印内容,因此它将正确显示内容.

  • 如果您使用PHP生成HTML,您应该坚持使用UTF-8并使用HTML标头发送`<meta charset ="utf-8">`.请记住**如果你这样做,你根本不需要任何"修复"这个字符串**. (3认同)