• 2011-11-19

    html返回的内容需要decode才能json_decode解析 - [php学习]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://wanping.blogbus.com/logs/175219640.html

    今天编写了一个解析json格式的工具,html嵌套的是php,发现在使用textareasubmit传递来的参数$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