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

asia_deng 2014-07-07 03:34:32
我在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));//好吧,结果还是空的



...全文
2152 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsdiedfdsd 2015-04-23
  • 打赏
  • 举报
回复
<input type="hidden" name="epqsql" id="epqsql" $json_string=$_POST['json']; 明白错在什么地方吗?应该是$json_string=$_POST['epqsql'];,本来$json_string就是空,后面怎么处理也是空。
asia_deng 2014-07-07
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
自己看看就知道是怎么回事了 其实这种一般性调试,是应该熟练掌握的
谢谢版主! 我用PHP没多久,也没系统的学过,很多都还不会
xuzuning 2014-07-07
  • 打赏
  • 举报
回复
$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] => 
        )

)

自己看看就知道是怎么回事了 其实这种一般性调试,是应该熟练掌握的
asia_deng 2014-07-07
  • 打赏
  • 举报
回复
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两次
asia_deng 2014-07-07
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
echo base64_encode($_POST['json']); 贴出结果
看了base64的编码和解码知道了,要用两次html_entity_decode才行,谢谢版主大人,谢谢jam00,结账
asia_deng 2014-07-07
  • 打赏
  • 举报
回复
base64_encode后echo出来
W3tcXCZhbXA7cXVvdDt0YWJsZVxcJmFtcDtxdW90OzpcXCZhbXA7cXVvdDtlcHFcXCZhbXA7cXVvdDssXFwmYW1wO3F1b3Q7ZmllbGRcXCZhbXA7cXVvdDs6XFwmYW1wO3F1b3Q7c3RhbmQ0XFwmYW1wO3F1b3Q7LFxcJmFtcDtxdW90O21heFxcJmFtcDtxdW90Ozo2MCxcXCZhbXA7cXVvdDttaW5cXCZhbXA7cXVvdDs6bnVsbH1dW10=W10=
xuzuning 2014-07-07
  • 打赏
  • 举报
回复
echo base64_encode($_POST['json']); 贴出结果
asia_deng 2014-07-07
  • 打赏
  • 举报
回复
引用 2 楼 jam00 的回复:
$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] => ) )
这个方法试过了,并没有错,只是如果把
$s = '[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';
换成
$s=$_POST['json'];
就不行了 可以问题出在POST的数据上, 但是在HTML里用js的eval把字符串转为json对象又能正常换行哦
asia_deng 2014-07-07
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
也真难为你了,做那么复杂的编码处理
$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里的数据不一样?
果酱很好吃 2014-07-07
  • 打赏
  • 举报
回复
$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] => ) )
xuzuning 2014-07-07
  • 打赏
  • 举报
回复
也真难为你了,做那么复杂的编码处理
$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] =>
)

)

本课程采用了漫画+动手实操+练习讲授Python编程技能。课程简介:第11章 常用内置模块11.1 数学计算模块 —— math模块11.2 日期时间模块 —— datetime模块11.2.1 datetime类11.2.2 date类11.2.3 time类11.2.4 计算时间跨度类——timedelta11.2.5 将日期时间对象与字符串相互转换11.3 正则表达式模块 —— re模块11.3.1 字符串匹配11.3.2 字符串查找11.3.3 字符串替换11.3.4 字符串分割11.5 练一练第12章 文件读写12.1 打开文件12.2 关闭文件12.2.1 在finally代码块中关闭文件12.2.2 在with as代码块中关闭文件12.3 读写文本文件12.4 动动手 —— 复制文本文件12.5 读写二进制文件12.6 动动手 —— 复制二进制文件12.1 练一练第13章 图形用户界面13.1 Python中的图形用户界面开发库13.2 安装wxPython17813.3 第一个wxPython程序18013.4 自定义窗口类18213.5 在窗口中添加控件18213.6 事件处理18413.7 布局管理18513.7.1 盒子布局管理器18613.7.2 动动手——重构事件处理示例13.7.3 动动手——盒子布局管理器嵌套示例13.8 控件13.8.1 文本输入控件13.8.2 复选框和单选按钮13.8.3 列表13.8.4 静态图片控件13.9 点拨点拨 —— 如何使用wxPython官方文档13.10 练一练第14章 网络通信14.1 基本的网络知识14.1.1 TCP/IP14.1.2 IP地址14.1.3 端口14.1.4 HTTP/HTTPS14.2 搭建自己的Web服务器14.3 urllib.request模块14.3.1 发送GET请求14.3.2 发送POST请求14.4 JSON数据14.4.1 JSON文档的结构14.4.2 对JSON数据的解码14.5 动动手 —— 下载图片示例14.6 动动手 —— 返回所有备忘录信息14.7 练一练第15章 访问数据库15.1 SQLite15.1.1 SQLite的数据类型15.1.2 Python的数据类型与SQLite的数据类型的映射15.1.3 使用GUI管理工具管理SQLite15.2 数据库编程的基本操作过程15.3.1 数据库连接对象Connection15.3.2 游标对象Cursor15.4 动动手 —— 数据库的CRUD操作示例15.4.1 示例中的数据表15.4.2 无条件查询15.4.3 有条件查询15.4.4 插入数据15.4.5 更新数据15.4.6 删除数据15.5 点拨点拨 —— 防止SQL注入攻击15.6 练一练第16章 多线程16.1 线程相关的知识16.1.1 进程16.1.2 线程16.1.3 主线程16.2 线程模块 —— threading模块16.3 创建子线程16.3.1 自定义函数实现线程体16.3.2 自定义线程类实现线程体16.4 线程管理16.4.1 等待线程结束16.4.2 线程停止16.5 动动手 —— 下载图片示例16.6 练一练

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧