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你能把它作为一个答案让我接受吗?