Usage of json_decode() and json_encode() in php and solution for Chinese not showing_PHP tutorial
WBOY
Release: 2016-07-13 10:55:53
Original
758 people have browsed it
This article introduces the usage of json_decode() and json_encode() in php and the solution for not displaying Chinese characters. Friends in need can refer to it.
json_decode() and json_encode() in php
1.json_decode()
json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_decode — Encode a JSON-formatted string
Description
mixed json_decode ( string $json [, bool $assoc ] )
Accepts a JSON formatted string and converts it into a PHP variable
Parameters
json
The string in json string format to be decoded.
assoc
When this parameter is TRUE, an array is returned instead of an object.
Return value
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.
You can see that json_decode($data,true) outputs an associative array. From this, we can see that json_decode($data) outputs an object, and json_decode("$arr",true) forces it to generate a PHP associative array. .
2.json_encode()
json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_encode — JSON encode variables
Report a bug Description
string json_encode ( mixed $value [, int $options = 0 ] )
Returns the JSON form of value
Report a bug parameter
value
The value to be encoded can be any data type except resource type
This function can only accept UTF-8 encoded data
options
Binary mask consisting of the following constants: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.
Report a bug return value
Returns a string representation in JSON format on success or FALSE on failure.
Report a bug update log
Version Description
5.4.0 options parameter adds constants: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, and JSON_UNESCAPED_UNICODE.
5.3.3 The options parameter adds a constant: JSON_NUMERIC_CHECK.
5.3.0 Add options parameter.
echo PHP_EOL."non-continuous array".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);
echo PHP_EOL."A non-continuous array generated by deleting a continuous array value".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>
The above routine will output:
The code is as follows
Copy code
Contiguous array
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"
Non-contiguous array
array(4) {
[1]=>
string(3) "foo"
[2]=>
string(3) "bar"
[3]=>
string(3) "baz"
[4]=>
string(5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"
A non-continuous array generated by deleting a continuous array value
array(3) {
[0]=>
string(3) "foo"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"
$obj->Name= 'a1';$obj->Number ='123';
$obj->Contno= '000';
echo json_encode($obj);
The result is:
{"Name":"a1",
"Number":"123",
"Contno":"000"
}
It can be seen that json_encode() and json_decode() are compilation and decompilation processes. Note that json only accepts utf-8 encoded characters, so the parameters of json_encode() must be utf-8 encoded, otherwise you will get null characters or null
If it’s in Chinese, be careful
Find a solution online:
Later I asked others for advice and found that base64 encoding can also be used, but base64 encoding cannot be placed in the URL. Baidu explained this:
Standard Base64 is not suitable for transmission directly in the URL, because the URL encoder will change the "/" and "+" characters in standard Base64 into the form of "%XX", and these "%" The number needs to be converted when it is stored in the database, because the "%" sign has been used as a wildcard character in ANSI SQL.
However, my data is sent via POST and is not in the HTTP head, but in the message-body, so it is not affected.
json_encode can only accept data in utf-8 format
For example: 'Xu' becomes 'u80e5' after json_encode processing, and the Chinese part of the final json is replaced with unicode encoding. What we have to solve is to convert the object into json and ensure that the Chinese inside the object still appears as normal Chinese in json. Now it seems that only using json_encode cannot achieve the goal.
My solution: first url-encode the Chinese field in the class (urlencode), then json-encode the object (jsonencode), and finally url-decode (urldecode) the json, which is the final json. The Chinese inside is still the same Chinese !
The test code is as follows:
public $item2 = 'Chinese';
function to_json() {
//url encoding, avoid json_encode converting Chinese to unicode
$this->item2 = urlencode($this->item2);
$str_json = json_encode($this);
//Decode the url and return each attribute after converting to json to ensure that the object attributes remain unchanged
$this->item2 = urldecode($this->item2);
return urldecode($str_json);
}
}
$c = new myClass();
echo json_encode($c);
echo ' ';
echo $c->to_json();
echo ' ';
echo json_encode($c);
echo ' ';
echo json_encode('襥');
?>
Program output result:
{"item1":1,"item2":"u4e2du6587"}
{"item1":1,"item2":"中文"}
{"item1":1,"item2":"u4e2du6587"}
"u80e5"
http://www.bkjia.com/PHPjc/632210.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/632210.htmlTechArticleThis article introduces the usage of json_decode() and json_encode() in php and the solution for Chinese not displaying, if necessary Friends can refer to it. json_decode() and json_encode() in php 1.js...
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