PHP中字符串替换时导致的乱码
PHP中字符串替换时导致的乱码
文件chinese.php本身是utf8编码。
chinese.php
<?php
define('l',"<br/>\n");
$f=$_REQUEST['f'];
function_exists($f)||die("Function$f not exists");
$f();
//========================================
function test1(){
header("Content-type:text/html;charset=gbk");
$finalStr='中国,3';
$finalStr=iconv('UTF-8','GBK',$finalStr);
echo$finalStr.l;
$finalStr=str_replace(',',',',$finalStr);
echo$finalStr.l;
}
//========================================
//========================================
function test2(){
header("Content-type:text/html;charset=utf-8");
$finalStr='中国,3';
echo$finalStr.l;
$finalStr=str_replace(',',',',$finalStr);
echo$finalStr.l;
}
//========================================
//========================================
function test3(){
header("Content-type:text/html;charset=utf-8");
$finalStr='chinese,3';
$finalStr=iconv('UTF-8','GBK',$finalStr);
echo$finalStr.l;
$finalStr=str_replace(',',',',$finalStr);
echo$finalStr.l;
}
//========================================
?>
1.测试一
http://localhost/research/chinese.php?f=test1
中国,3
中国锛?
2.测试二
http://localhost/research/chinese.php?f=test2
中国,3
中国,3
3.测试三
http://localhost/research/chinese.php?f=test3
chinese,3
chinese,3
4.总结
根据以上的测试,可以得出如下的结论:
function test1:
由于刚开始"中国,3"是utf8编码,且里面的内容含有中文,后面通过iconv转换成了gbk编码,而str_replace(',',',',$finalStr);中,是全角逗号,可以理解为中文,而且是utf8编码的中文,由于”中国,3“已经转换成了gbk编码,全角逗号是utf8编辑,因此替换的时候出现了乱码。
function test2:
“中国,3”与“,”均是utf8编码,因此进行str_replace操作后没有导致乱码。
function test3:
“chinese,3”是数字、字母及,(逗号),不管转换成什么编码还是原来的内容,尽管str_replace(',',',',$finalStr);中是全角逗号,可以理解为中文,但是由于”chinese,3“中没有中文,所以替换后没有导致乱码,只能这样理解了。