Home > Backend Development > PHP Tutorial > Solution to Chinese problem when php processes json_PHP tutorial

Solution to Chinese problem when php processes json_PHP tutorial

WBOY
Release: 2016-07-21 15:30:49
Original
855 people have browsed it

The code for the operation is as follows:

Copy the code The code is as follows:

$usr = new User();
echo json_encode($usr);
?>

Very simple code, everything works fine without Chinese, the output is as follows:
{"PlatformID":"123213","UserID":"1023"}
Two situations will occur once there is Chinese.

The first case is that an attribute whose value is Chinese is UTF-8 encoded, and there will be the following output:


{"PlatformID":"123213" ,"UserID":"1023","UserName":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"}
The UserName is in non-human language. This is normal. If we use firebug to see it, it is in Chinese. (I struggled with this for a long time)

The second case is non-utf-8 encoding, and the output will become null:

{"PlatformID":"123213","UserID":"1023 ","UserName":null}
It's strange. After checking the manual, I found that json_encode is only valid for utf-8, and other encodings will become null.


Let's start solving the encoding. Conversion problem.
See other people’s functions on php.net as follows:
Copy the code The code is as follows:

private function to_utf8 ($in)
{
if (is_array($in)) {
foreach ($in as $key => $value)
{
$out[$this-> ;to_utf8($key)] = $this->to_utf8($value);
}
}
elseif(is_string($in))
{
if(mb_detect_encoding($ in) != "UTF-8")
return utf8_encode($in);
else
return $in;
}
else
{
return $in;
}
return $out;
}

So I took it and converted the encoding and found that it was no longer null. I was delighted to open it with firebug and found that it was not my original Chinese characters. ....Starting to get confused...
Is it necessary to convert him to the original encoding? Go back and find the original encoding...
Start the test:

1. Output $usr->UserName directly, and set charset=utf-8 in the page header. Garbled characters
2.echo json_encode($usr) outputs UserName=null
3. The page header is set to charset=gbk, and the output is correct -> It can be determined that the original encoding is gbk
Finally, the conclusion is drawn through IE, Chrome, and Firefox tests:


1. Ensure that the character set of the page is consistent with the database, and the output must be normal.
2. When doing json_encode, ensure that the data encoding is utf-8 and json_decode is normal.
3. If you want to json_encode non-utf-8 characters, convert them to utf-8 first.
4. When doing json_decode on non-utf-8 characters, you must not forget to convert to the original encoding, otherwise garbled characters will be output!!
The problem that has been bothering me for a day is finally solved.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/323182.htmlTechArticleThe code for the operation is as follows: Copy the code as follows: ?php $usr = new User(); echo json_encode($ usr); ? Very simple code, everything works fine without Chinese, the output is as follows: {"PlatformID"...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template