Php str_替换不使用特殊字符

Php str_替换不使用特殊字符,php,utf-8,character-encoding,internationalization,Php,Utf 8,Character Encoding,Internationalization,为什么这不能像预期的那样工作: echo str_replace("é","é","Fédération Camerounaise de Football"); 结果: "Fédération Camerounaise de Football" 我希望有: "Fédération Camerounaise de Football" 检查以下代码: $chain="Fédération Camerounaise de Football"; $pattern = array("

为什么这不能像预期的那样工作:

 echo str_replace("é","é","Fédération Camerounaise de Football");
结果:

"Fédération Camerounaise de Football"
我希望有:

"Fédération Camerounaise de Football"

检查以下代码:

$chain="Fédération Camerounaise de Football";
$pattern = array("'é'");
$replace = array('é'); 
$chain = preg_replace($pattern, $replace, $chain);
echo $chain;
//评论后编辑

Fédération Camerounaise de Football
是一个
UTF-8
编码字符串,因此我不知道您的文档中没有
UTF-8
编码的输入,但您有两个选项

  • 传递到
    str_replace
    的输入是
    utf-8
    ,但要替换的函数中使用的字符是
    ANSII
    或其他=>无效-这意味着您的文档不是
    utf-8
    -这就是
    uft8_decode
    有效的原因
    str\u替换(ANSII,ANSII,转换为ANSII(UTF-8))

  • 您的输入不是
    utf-8
    ,您的文档是-因此这将起作用
    str\u替换(UTF-8,UTF-8,转换为UTF-8(ANSII))


  • str\u replace
    在处理多字节字符时效果很好-您的问题不在于它的功能,而是因为您试图替换不同的编码类型。不要使用替代函数-我建议您将传递到
    str_replace
    的输入修复为
    utf-8
    ,并确保您的文档也是
    utf-8
    编码的

    如果您的源代码仅支持非
    utf-8
    编码,请使用
    utf8\u encode
    将您的输入转换为
    utf-8


    你做错了。此字符串不正确,需要替换,它仅使用UTF-8编码

    你所要做的就是
    utf8_解码('Fédé喀麦隆足球定量供应')

    更新: 您看到的是
    Fédération Camerounaise de Football
    输出,因为您在UTF-8中双重传递数据

    注意:

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

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

    喀麦隆足球定量配给

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

    让我们用ASCII再试一次:

    file5.php以ASCII格式保存:

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

    这里的问题是字符编码,而不是
    str_replace()
    。@Cobra_Fast好的,我该怎么办?我认为这是一个多字节的问题,在这种情况下,请尝试使用或。正确设置您的内容(我怀疑您有UTF-8数据库连接和ISO-8859/拉丁输出)或乱用
    utf8_decode()
    mb_convert_encoding()
    iconv()
    @Cobra_Fast我不使用任何数据库,它是一行代码:echo str_replace(“Ô)、“e”、“Fédération Camerounaise de Football”);它告诉我“喀麦隆足球队”你的预期结果是什么?str_replace(“Ô),“é”,utf8_decode(“FÃdÃdération Camerounaise de Football”))不起作用。根本不要使用
    str\u replace
    !如果像这样硬编码PHP文件中的字符串,可能会使事情变得更糟。文件本身也可能用UTF-8编码,所以这一切都不起作用。如果你想知道这里到底发生了什么,请将其保存在ASCII中。如果你使用PHP生成HTML,你应该坚持使用UTF-8,并用HTML标题发送
    。只要记住,如果你这样做的话,你根本不需要对这个字符串进行任何“修复”。@RachidO。我解释了我的答案,结果是“FÃ)dÃU编码('FÃdé足球定量喀麦隆”),结果是“FÃd)足球定量喀麦隆”哥们,你的字符串只需编码两次,只需使用
    echo utf8ƒU解码('FÃ足球定量喀麦隆定量喀麦隆”)你会看到的。@Havenard你能把它作为一个答案让我接受吗?