首页 > 后端开发 > php教程 > php 解析HTML post过来的json字符串

php 解析HTML post过来的json字符串

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-23 13:54:20
原创
1393 人浏览过

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

<input type="hidden" name="epqsql" id="epqsql" value="[{"table":"epq","field":"stand4","max":60,"min":null}]">
登录后复制
登录后复制

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里看到的是

<input type="hidden" name="epqsql" id="epqsql" value="[{"table":"epq","field":"stand4","max":60,"min":null}]">
登录后复制
登录后复制

但是到了PHP就成了
[{\\&quot;table\\&quot;:\\&quot;epq\\&quot;,\\&quot;field\\&quot;:\\&quot;stand4\\&quot;,\\&quot;max\\&quot;:60,\\&quot;min\\&quot;: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没多久,也没系统的学过,很多都还不会
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
解析变量
来自于 1970-01-01 08:00:00
0
0
0
单引号可以解析\'和\
来自于 1970-01-01 08:00:00
0
0
0
thinkPHP 素材网解析
来自于 1970-01-01 08:00:00
0
0
0
phpstorm 解析器怎么弄
来自于 1970-01-01 08:00:00
0
0
0
PHP解析json
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板