-
2011-11-19
html返回的内容需要decode才能json_decode解析 - [php学习]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://wanping.blogbus.com/logs/175219640.html
今天编写了一个解析json格式的工具,html嵌套的是php,发现在使用textarea,submit传递来的参数$res=$_POST[‘res’],使用php自带的函数json_decode无法解析,而相同的代码,单独的php代码可以解析,部分代码如下:
<form action="cmeRes.php" method="post">
<textarea name="cmeRes" cols="100" rows="5" ></textarea><br>
<input type="submit" value="解析" >
</form>
<table style="background:#CAD9EA;width:100%;border-collapse:separate;" cellspacing="1" cellpadding="3">
<tr bgcolor="#CCCCCC" align="center"><td>字段说明</td><td>字段内容</td></tr>
<?php
if(isset($_POST['cmeRes'])&&($_POST['cmeRes']!=""))
{
$res = html_entity_decode($_POST['cmeRes']);//echo $res;
if(strstr($res,"= {"))
{
$jsons = explode(" = ",$res);//print_r($jsons[1]);
$jsonstr = $jsons[1];
$resArr = json_decode($jsonstr,true);var_dump($resArr)
……
}
}
红色部分打印出来是null
同样的代码,只是把php代码抽出来,可以正常解析
解决办法:
1、 对html提交的内容进行解码
Php有提供的函数html_entity_decode 供它使用,如下
$res = html_entity_decode($_POST['cmeRes']);
方可正常解析出json格式的数组
2、修改php.ini中的filter.default的值
在php.ini中 有一项设置 filter.default = special_chars 这是对参数的缺省处理
改成这样 filter.default = unsafe_raw 也可以解决你的这个问题
3、使用filter_input函数获取数组参数
不要用 $_POST数组获取参数 而使用filter_input函数获取,这个函数有参数 可以指定处理方式
2011
收藏到:Del.icio.us







