php 解析HTML post过来的json字符串 本帖最后由 asia_deng 于 2014-07-07 15:48:48 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 xuzuning 于 2014-07-07 15:57:51 编辑 $str='[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';$new=htmlspecialchars_decode($str);$new=str_replace('\\','',$new);$new1=json_decode($new,true);echo "<pre>";print_r($new1);echo "</pre>";Array( [0] => Array ( [table] => a [field] => value [max] => 60 [min] => )) 还是不行哦但是我在php里直接写$json_string='[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';是可以的,难道POST里的数据不一样? 这个方法试过了,并没有错,只是如果把$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= 看了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是看不到&quot;这个的)所以要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没多久,也没系统的学过,很多都还不会 mysql控制台插入汉字无乱码,php插入就乱码; sina微博API登陆(PHP) phpmailer使用中的小错误,请高手帮忙 php 带权随机数 没后缀的远程图片 如何保存 关于php切割字符串的问题。 PHP及时通信的问题 急!!!隐藏路径问题 程序是什么? 图片删除 成员变量问题 php 伪静态问题
$new=htmlspecialchars_decode($str);$new=str_replace('\\','',$new);$new1=json_decode($new,true);
echo "<pre>";
print_r($new1);
echo "</pre>";
Array
(
[0] => Array
(
[table] => a
[field] => value
[max] => 60
[min] =>
))
还是不行哦
但是我在php里直接写$json_string='[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';是可以的,难道POST里的数据不一样?
$s = '[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';
换成
$s=$_POST['json'];
就不行了
可以问题出在POST的数据上,
但是在HTML里用js的eval把字符串转为json对象又能正常换行哦
贴出结果
[{\\&quot;table\\&quot;:\\&quot;epq\\&quot;,\\&quot;field\\&quot;:\\&quot;stand4\\&quot;,\\&quot;max\\&quot;:60,\\&quot;min\\&quot;:null}](echo输出到html是看不到&quot;这个的)
所以要html_entity_decode两次
$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没多久,也没系统的学过,很多都还不会