เจอว่า json_encode มันไม่ return ผลลัพธ์ ออกมาเลยในหน้าเดียวกัน แต่ต่างกันที่ product id ลอง print_r / var_dump ตัว array ที่เข้าไปใน function ก็ปกติดี ไม่ได้มากมาย หรือมีเครื่องหมายพิเศษอะไร ลอง debug ดูถึงเจอว่าถ้าใช้ function json_last_error() มันจะ return เลข 7 กลับมาในหน้าที่มีปัญหา ลองค้นดูรหัส 7 คือ infinity number ลอง unset ตัว key ที่เป็น float(-INF) ดูก็กลับเป็นปกติจริงๆ
รหัสต่างๆ คือ
Code | Constant | Meaning | Availability |
---|---|---|---|
0 |
JSON_ERROR_NONE |
No error has occurred | |
1 |
JSON_ERROR_DEPTH |
The maximum stack depth has been exceeded | |
2 |
JSON_ERROR_STATE_MISMATCH |
Invalid or malformed JSON | |
3 |
JSON_ERROR_CTRL_CHAR |
Control character error, possibly incorrectly encoded | |
4 |
JSON_ERROR_SYNTAX |
Syntax error | |
5 |
JSON_ERROR_UTF8 |
Malformed UTF-8 characters, possibly incorrectly encoded | PHP 5.3.3 |
6 |
JSON_ERROR_RECURSION |
One or more recursive references in the value to be encoded | PHP 5.5.0 |
7 |
JSON_ERROR_INF_OR_NAN |
One or moreNAN or INF values in the value to be encoded |
PHP 5.5.0 |
8 |
JSON_ERROR_UNSUPPORTED_TYPE |
A value of a type that cannot be encoded was given | PHP 5.5.0 |
9 |
JSON_ERROR_INVALID_PROPERTY_NAME |
A property name that cannot be encoded was given | PHP 7.0.0 |
10 |
JSON_ERROR_UTF16 |
Malformed UTF-16 characters, possibly incorrectly encoded | PHP 7.0.0 |
<!doctype html> <html> <head> <meta charset="utf-8"> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <title>PHP: json_encode error</title> <meta content="Pitt Phunsanit" name="author" /> </head> <body> <div class="container"> <?php $datas = [ 'ininfity' => -9e1000, 'title' => 'title', ]; ?> <div class="row"><label class="col-md-2" for="">Datas Arrya:</label><textarea class="col-md-10" cols="100" rows="6"><?=var_dump($datas); ?></textarea></div> <div class="row"><label class="col-md-2" for="">Json Datas:</label><textarea class="col-md-10" cols="100" rows="6"><?=json_encode($datas); ?></textarea></div> <div class="row"> <label class="col-md-2" for="">Json Error:</label> <div class="col-md-10"><?=json_last_error(); ?></div> </div> <table class="table table-striped"> <caption><strong>JSON error codes</strong></caption> <thead> <tr> <th>Code</th> <th>Constant</th> <th>Meaning</th> <th>Availability</th> </tr> </thead> <tbody class="tbody"> <tr> <td><strong><code><?=JSON_ERROR_NONE; ?></code></strong></td> <td><strong><code>JSON_ERROR_NONE</code></strong></td> <td>No error has occurred</td> <td class="empty"> </td> </tr> <tr> <td><strong><code><?=JSON_ERROR_DEPTH; ?></code></strong></td> <td><strong><code>JSON_ERROR_DEPTH</code></strong></td> <td>The maximum stack depth has been exceeded</td> <td class="empty"> </td> </tr> <tr> <td><strong><code><?=JSON_ERROR_STATE_MISMATCH; ?></code></strong></td> <td><strong><code>JSON_ERROR_STATE_MISMATCH</code></strong></td> <td>Invalid or malformed JSON</td> <td class="empty"> </td> </tr> <tr> <td><strong><code><?=JSON_ERROR_CTRL_CHAR; ?></code></strong></td> <td><strong><code>JSON_ERROR_CTRL_CHAR</code></strong></td> <td>Control character error, possibly incorrectly encoded</td> <td class="empty"> </td> </tr> <tr> <td><strong><code><?=JSON_ERROR_SYNTAX; ?></code></strong></td> <td><strong><code>JSON_ERROR_SYNTAX</code></strong></td> <td>Syntax error</td> <td class="empty"> </td> </tr> <tr> <td><strong><code><?=JSON_ERROR_UTF8; ?></code></strong></td> <td><strong><code>JSON_ERROR_UTF8</code></strong></td> <td>Malformed UTF-8 characters, possibly incorrectly encoded</td> <td>PHP 5.3.3</td> </tr> <tr> <td><strong><code><?=JSON_ERROR_RECURSION; ?></code></strong></td> <td><strong><code>JSON_ERROR_RECURSION</code></strong></td> <td>One or more recursive references in the value to be encoded</td> <td>PHP 5.5.0</td> </tr> <tr> <td><strong><code><?=JSON_ERROR_INF_OR_NAN; ?></code></strong></td> <td><strong><code>JSON_ERROR_INF_OR_NAN</code></strong></td> <td> One or more <a class="link" href="http://php.net/manual/de/language.types.float.php#language.types.float.nan" target="_blank"><strong><code>NAN</code></strong></a> or <a class="link" href="http://php.net/manual/de/function.is-infinite.php" target="_blank"><strong><code>INF</code></strong></a> values in the value to be encoded </td> <td>PHP 5.5.0</td> </tr> <tr> <td><strong><code><?=JSON_ERROR_UNSUPPORTED_TYPE; ?></code></strong></td> <td><strong><code>JSON_ERROR_UNSUPPORTED_TYPE</code></strong></td> <td>A value of a type that cannot be encoded was given</td> <td>PHP 5.5.0</td> </tr> <tr> <td><strong><code><?=JSON_ERROR_INVALID_PROPERTY_NAME; ?></code></strong></td> <td><strong><code>JSON_ERROR_INVALID_PROPERTY_NAME</code></strong></td> <td>A property name that cannot be encoded was given</td> <td>PHP 7.0.0</td> </tr> <tr> <td><strong><code><?=JSON_ERROR_UTF16; ?></code></strong></td> <td><strong><code>JSON_ERROR_UTF16</code></strong></td> <td>Malformed UTF-16 characters, possibly incorrectly encoded</td> <td>PHP 7.0.0</td> </tr> </tbody> </table> </div> </body> </html>