当前位置:Gxlcms > PHP教程 > php解析HTMLpost过来的json字符串

php解析HTMLpost过来的json字符串

时间:2021-07-01 10:21:17 帮助过:8人阅读

我在js里把一个json对象转为json字符串,然后放到一个隐含的input里提交到php
这是HTML的部分

php里获取到的字符串是:

[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]

对字符串处理
$json_string=$_POST['json'];$json=htmlspecialchars_decode($json_string);print_r(json_decode($json));//结果是空的


换一下
$json=stripslashes(htmlspecialchars_decode($json_string));print_r(json_decode($json));//结果还是空的


再改一下
$json=stripslashes(stripslashes(htmlspecialchars_decode($json_string)));print_r(json_decode($json));//好吧,结果还是空的




回复讨论(解决方案)

也真难为你了,做那么复杂的编码处理

$s = '[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';$s = html_entity_decode($s);$s = stripslashes($s);print_r(json_decode($s, 1));
Array(    [0] => Array        (            [table] => a            [field] => value            [max] => 60            [min] =>         ))

$str='[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';$new=htmlspecialchars_decode($str);$new=str_replace('\\','',$new);$new1=json_decode($new,true);echo "
";print_r($new1);echo "
";

Array
(
[0] => Array
(
[table] => a
[field] => value
[max] => 60
[min] =>
)

)

也真难为你了,做那么复杂的编码处理

$s = '[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';$s = html_entity_decode($s);$s = stripslashes($s);print_r(json_decode($s, 1));
Array(    [0] => Array        (            [table] => a            [field] => value            [max] => 60            [min] =>         ))



还是不行哦
但是我在php里直接写$json_string='[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';是可以的,难道POST里的数据不一样?

$str='[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';$new=htmlspecialchars_decode($str);$new=str_replace('\\','',$new);$new1=json_decode($new,true);echo "
";print_r($new1);echo "
";

Array
(
[0] => Array
(
[table] => a
[field] => value
[max] => 60
[min] =>
)

)


这个方法试过了,并没有错,只是如果把
$s = '[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';

换成
$s=$_POST['json'];

就不行了
可以问题出在POST的数据上,
但是在HTML里用js的eval把字符串转为json对象又能正常换行哦

echo base64_encode($_POST['json']);
贴出结果

base64_encode后echo出来

W3tcXCZhbXA7cXVvdDt0YWJsZVxcJmFtcDtxdW90OzpcXCZhbXA7cXVvdDtlcHFcXCZhbXA7cXVvdDssXFwmYW1wO3F1b3Q7ZmllbGRcXCZhbXA7cXVvdDs6XFwmYW1wO3F1b3Q7c3RhbmQ0XFwmYW1wO3F1b3Q7LFxcJmFtcDtxdW90O21heFxcJmFtcDtxdW90Ozo2MCxcXCZhbXA7cXVvdDttaW5cXCZhbXA7cXVvdDs6bnVsbH1dW10=W10=

echo base64_encode($_POST['json']);
贴出结果


看了base64的编码和解码知道了,要用两次html_entity_decode才行,谢谢版主大人,谢谢jam00,结账

HTML里看到的是


但是到了PHP就成了
[{\\"table\\":\\"epq\\",\\"field\\":\\"stand4\\",\\"max\\":60,\\"min\\":null}]

(echo输出到html是看不到"这个的)
所以要html_entity_decode两次

$s = 'W3tcXCZhbXA7cXVvdDt0YWJsZVxcJmFtcDtxdW90OzpcXCZhbXA7cXVvdDtlcHFcXCZhbXA7cXVvdDssXFwmYW1wO3F1b3Q7ZmllbGRcXCZhbXA7cXVvdDs6XFwmYW1wO3F1b3Q7c3RhbmQ0XFwmYW1wO3F1b3Q7LFxcJmFtcDtxdW90O21heFxcJmFtcDtxdW90Ozo2MCxcXCZhbXA7cXVvdDttaW5cXCZhbXA7cXVvdDs6bnVsbH1dW10=W10=';$s = base64_decode($s);$s = str_replace('\\', '', $s);$s = html_entity_decode($s);$s = html_entity_decode($s);echo $s, PHP_EOL;print_r(json_decode(substr($s, 0, -4), 1));
[{"table":"epq","field":"stand4","max":60,"min":null}][]?Array(    [0] => Array        (            [table] => epq            [field] => stand4            [max] => 60            [min] =>         ))
自己看看就知道是怎么回事了
其实这种一般性调试,是应该熟练掌握的

自己看看就知道是怎么回事了
其实这种一般性调试,是应该熟练掌握的


谢谢版主!
我用PHP没多久,也没系统的学过,很多都还不会

人气教程排行