在项目开发中遇到了 echo json_encode($res);返回结果空白
可以用两个PHP自带的方法来检查错误
json_last_error()
(PHP 5 >= 5.3.0, PHP 7)
json_last_error — 返回最后发生的错误
如官方所示,这个函数会返回当前json_encode的错误原因,返回的是数字,需要对应看下具体是哪个错误。
JSON_ERROR_NONE |
没有错误发生 | |
JSON_ERROR_DEPTH |
到达了最大堆栈深度 | |
JSON_ERROR_STATE_MISMATCH |
无效或异常的 JSON | |
JSON_ERROR_CTRL_CHAR |
控制字符错误,可能是编码不对 | |
JSON_ERROR_SYNTAX |
语法错误 | |
JSON_ERROR_UTF8 |
异常的 UTF-8 字符,也许是因为不正确的编码。 | PHP 5.3.3 |
JSON_ERROR_RECURSION |
One or more recursive references in the value to be encoded | PHP 5.5.0 |
JSON_ERROR_INF_OR_NAN |
One or more NAN or INF values in the value to be encoded |
PHP 5.5.0 |
JSON_ERROR_UNSUPPORTED_TYPE |
指定的类型,值无法编码。 | PHP 5.5.0 |
JSON_ERROR_INVALID_PROPERTY_NAME |
指定的属性名无法编码。 | PHP 7.0.0 |
JSON_ERROR_UTF16 |
畸形的 UTF-16 字符,可能因为字符编码不正确。 | PHP 7.0.0 |
错误码对照:
0 JSON_ERROR_NONE
1 JSON_ERROR_DEPTH
2 JSON_ERROR_STATE_MISMATCH
3 JSON_ERROR_CTRL_CHAR
4 JSON_ERROR_SYNTAX
5 JSON_ERROR_UTF8
6 JSON_ERROR_RECURSION
7 JSON_ERROR_INF_OR_NAN
8 JSON_ERROR_UNSUPPORTED_TYPE
json_last_error_msg()
(PHP 5 >= 5.5.0, PHP 7)
json_last_error_msg — Returns the error string of the last json_encode() or json_decode() call
这个方法会返回错误原因解释,例如:Malformed UTF-8 characters, possibly incorrectly encoded
Malformed UTF-8 characters, possibly incorrectly encoded这个错误一般就是utf-8编码中有些特殊中文转码乱码导致的。重新转一次utf-8就好了。
mb_convert_encoding( $str, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' );