Garbled Chinese characters is really a sad thing, JAVA hates Chinese characters, and PHP doesn’t like Chinese characters either;
Java garbled code was finally filtered using the filter provided by spring. Filtering everywhere actually affects the speed, but there is no way. Chinese characters are the first thing that W country does not consider;
I didn’t expect that PHP is also full of garbled characters. When you use my brother MySQL, the Chinese characters seem so friendly. I never thought that they would become a bible. However, in order to interact with others, I put PHP’s hand into the SQL SERVER. At that time, garbled codes came. The reason was the GBK encoding used by the third-party system;
Hey, switch;
1. PHP’s own conversion function ICONV, a sophisticated function;
Copy code The code is as follows:
string iconv ( string $in_charset , string $out_charset , string $str )
Use DEMO:
Copy code The code is as follows:
$text = "This is the Euro symbol '€'.";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
?>
A function that everyone recommends, but it cannot be converted after use. There are no errors and the characters are not converted. NO!
2. Take another approach, and there is another function that everyone doubts is inefficient, but in any case, implement it first and then consider the other three
Copy code The code is as follows:
//Check whether the function is available
echo function_exists('mb_convert_encoding');
//Detect current encoding
echo mb_detect_encoding($val, "GBK, GB2312, UTF-8");
//Convert encoding, convert CP936 (that is, GBK) to UTF-8
$v=mb_convert_encoding ($val, "UTF-8", "CP936");
The result was successful;
Okay, let’s use it first. In order to convert the result set of the database query, make a conversion function:
1. Function "garbled nemesis":
Copy code The code is as follows:
// $fContents string
// $from string encoding
// $to encoding to convert
function auto_charset($fContents,$from='gbk',$to='utf-8'){
$from = strtoupper($from)=='UTF8'? 'utf-8':$from;
$to = strtoupper($to)=='UTF8'? 'utf-8':$to;
If( strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents)) ){
//If the encoding is the same or it is not a string scalar, it will not be converted
return $fContents;
}
If(is_string($fContents) ) {
If(function_exists('mb_convert_encoding')){
return mb_convert_encoding ($fContents, $to, $from);
}else{
return $fContents;
}
}
elseif(is_array($fContents)){
foreach ( $fContents as $key => $val ) {
$ _Key = Auto_Charset ($ Key, $ From, $ To);
$fContents[$_key] = auto_charset($val,$from,$to);
If($key != $_key )
unset($fContents[$key]);
}
return $fContents;
}
else{
return $fContents;
}
}
2, use:
Copy code The code is as follows:
//Print the query results (assuming your results)
$arr=array();
while($list=mssql_fetch_row($row))
{
$arr[]=$list;
}
$s=auto_charset($arr,'gbk','utf-8');
//Try printing, set the encoding to UFT-8 in the browser, and see that there are no garbled characters
print_r($s);die();
The above is the introduction of this article about Chinese garbled characters in PHP. I hope you all like it.