バックスペース(\x08): \b 水平タブ (\x09): \t 改ページ (\x0C): \f
以下は詳細です。
json_last_error() は php-5.3 で使えるので、無い場合、適当な場所にインストールします。
$ ./configure --prefix=/usr/local/stow/php-5.3.2 --disable-cgi --disable-all --enable-json $ make $ sudo make install
エラーの出る(json_decode() が NULL を返す)プログラムに json_last_error() を追加します。
$ lv /tmp/test.php ... var_dump(json_decode($buf)); var_dump(json_last_error()); $arr = get_defined_constants(true); var_dump($arr["json"]); ...
json_last_error() が JSON_ERROR_CTRL_CHAR でした。
$ /usr/local/stow/php-5.3.2/bin/php /tmp/test.php | lv
...
NULL
int(3)
array(10) {
["JSON_HEX_TAG"]=>
int(1)
["JSON_HEX_AMP"]=>
int(2)
["JSON_HEX_APOS"]=>
int(4)
["JSON_HEX_QUOT"]=>
int(8)
["JSON_FORCE_OBJECT"]=>
int(16)
["JSON_ERROR_NONE"]=>
int(0)
["JSON_ERROR_DEPTH"]=>
int(1)
["JSON_ERROR_STATE_MISMATCH"]=>
int(2)
["JSON_ERROR_CTRL_CHAR"]=>
int(3)
["JSON_ERROR_SYNTAX"]=>
int(4)
}
$buf を最小限にしてテストしたところ、バックスペース、水平タブ、改ページ、が、そのまま書かれていることが原因でした。
0 件のコメント:
コメントを投稿