Php str_replace不能处理特殊字符


Php str_replace not working with special chars

为什么不按预期工作:

 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ération Camerounaise de Football')

<标题>更新:

您看到Fédération Camerounaise de Football作为输出,因为您在UTF-8中双重传递数据。

观察:

file1.php保存为UTF-8格式:

<?php
    echo "Fédération Camerounaise de Football";
输出:

Fédé配给Camerounaise de Football

现在,如果你告诉浏览器你正在使用UTF-8,它应该直接显示内容:

file2.php保存为UTF-8格式:

<?php
    header('Content-Type: text/html; charset=utf-8');
    echo "Fédération Camerounaise de Football";
输出:

fcv

完美。

然而,你做的事情更糟。您有一个UTF-8编码的字符串,并且通过将其写入UTF-8编码的文件来再次对其进行编码。

file3.php保存为UTF-8格式:

<?php
    echo "Fédération Camerounaise de Football";
输出:

Fédé配给Camerounaise de Football

真是一团糟。让我们看看是否可以用str_replace:

来解决这个问题,让它变得更糟

file4.php保存为UTF-8格式:

<?php
    echo str_replace("é","é","Fédération Camerounaise de Football");
输出:

Fédé配给Camerounaise de Football

如你所见,我们"修复"了它。排序的。这就是你在做的。您正在将é转换为é,即使您没有看到这一点,因为您的编辑器不会让您看到编码背后的真正符号,但浏览器会

让我们用ASCII:

再试一次

file5.php保存为ASCII格式:

<?php
    echo str_replace("é","é","Fédération Camerounaise de Football");
输出:

fcv

神奇!浏览器现在什么都有了。但真正的解决方案是什么?好。如果你有一个字符串硬编码在你的PHP文件,那么你应该简单地写Fédération Camerounaise de Football,而不是把该死的东西错了。但是,如果您是从另一个文件或数据库中获取它,您应该选择以下两种课程之一:

  1. 使用utf8_decode()将获取的数据转换为您想要的输出

  2. 不要转换任何东西,使用header('Content-Type: text/html; charset=utf-8');来告诉浏览器你正在打印UTF-8格式的内容,这样它会正确显示。

//评论后编辑

Fédération Camerounaise de Football是一个UTF-8编码的字符串,所以我不知道什么输入不是utf-8编码在你的文档,但你有两个选项。

  1. 您传递给str_replace的输入是utf-8,但您在函数中使用的字符替换为ANSII或其他东西=>不起作用-这意味着您的文档不是utf-8 -这就是为什么uft8_decode工作str_replace(ANSII, ANSII, CONVERT_TO_ANSII(UTF-8))

  2. 你的输入不是utf-8,你的文档是-所以这将工作str_replace(UTF-8, UTF-8, CONVERT_TO_UTF-8(ANSII))


str_replace对于多字节字符非常有效-您的问题不是函数,而是因为您尝试替换不同的编码类型。而不是使用替代函数-我建议您将传递给str_replaceutf-8的输入修复,并确保您的文档也是utf-8编码的。

如果您的源代码只支持非utf-8编码,请使用utf8_encode将您的输入转换为utf-8

http://php.net/manual/de/function.utf8-encode.php

检查以下代码:

$chain="Fédération Camerounaise de Football";
$pattern = array("'é'");
$replace = array('é'); 
$chain = preg_replace($pattern, $replace, $chain);
echo $chain;