2017-07-01 92 views
1

我现在写的Android应用程序和应用程序将使用JSON(UTF-8):PHP无法读取UFT8 JSON

http://.....xxx.php?json=%7B%22name%22%3A%22peterchan%22%2C%22phone%22%3A%2212345678%22%2C%22password%22%3A%226kxhSJM6iLB0kZ9LZGCEUQ%3S%3D%0A%22%7D

xxx.php是这样的:

<?php 
    header("Content-Type:text/html; charset=utf-8"); 
    ini_set('default_charset', 'utf-8'); 
    $json = $_GET["json"]; 
    $obj = json_decode($json); 
    $name = $obj -> {"name"}; 
    $phone = $obj -> {"phone"}; 
    $password = $obj -> {"password"}; 
    printf($json); 
?> 

但它返回: Warning: printf():参数太少xxx.php

任何人都可以帮我吗?请

+0

如果你想创建一些东西,你应该使用'POST' ...和'GET'来检索... –

+0

我可以举一些例子吗?对于android 我无法找到一个工作示例与“放”JsonObject –

+0

你需要什么使用'printf()'? –

回答

2

您应该验证json_decode不返回null并检查错误,如果这样使用json_last_error_msg

您的密码以新行(也许它本不应该存在),这是结束percent-encoded%0A这是无效的因为in JSON newlines must be escaped as \n这将是百分比编码为%5Cn

演示:https://3v4l.org/vTM2r

$broke = '%7B%22name%22%3A%22peterchan%22%2C%22phone%22%3A%2212345678%22%2C%22password%22%3A%226kxhSJM6iLB0kZ9LZGCEUQ%3S%3D%0A%22%7D'; 
$fixed = '%7B%22name%22%3A%22peterchan%22%2C%22phone%22%3A%2212345678%22%2C%22password%22%3A%226kxhSJM6iLB0kZ9LZGCEUQ%3S%3D%5Cn%22%7D'; 

var_dump(urldecode($broke)); 
// string(80) "{"name":"peterchan","phone":"12345678","password":"6kxhSJM6iLB0kZ9LZGCEUQ%3S= 
// "}" 

var_dump(json_decode(urldecode($broke))); 
// NULL 

var_dump(urldecode($fixed)); 
// string(81) "{"name":"peterchan","phone":"12345678","password":"6kxhSJM6iLB0kZ9LZGCEUQ%3S=\n"}" 

var_dump(json_decode(urldecode($fixed))); 
// object(stdClass)#1 (3) { 
// ["name"]=> 
// string(9) "peterchan" 
// ["phone"]=> 
// string(8) "12345678" 
// ["password"]=> 
// string(27) "6kxhSJM6iLB0kZ9LZGCEUQ%3S= 
// " 
// }