PHP null returned with json_decode


PHP null returned with json_decode

由于某种原因,我在json字段中遇到了由所见即所得编辑器生成HTML的问题。

我正在使用wordpress和angularJS,我正在尝试制作一个更新某个帖子的表单。

获取数据工作正常,例如,我正在做一些事情,如在服务器上

$data = [
'title'=>$post->post_title,
'description'=>$post->post_content // contains html via a WYSIWYG editor
.... more stuff
]
header('Content-Type: application/json');
echo json_encode($data);
exit;

表单自动填充上面的数据OK。

当我试图通过返回JSON.stringify(data)回服务器更新帖子时,问题正在发生。当我尝试在服务器上json_decode($_POST['data'])时,我得到以下PHP错误,这是由于data.description的HTML内容而发生的。没有data.description,我的代码可以很好地更新post

json_last_error: 4
json_last_error_msg: "Syntax error"
json_decode($_POST['data']) == null 

但是在Javascript中,当我做console.log(JSON.stringify(data))并验证JSON数据是好的。

我没有启用魔法配额get_magic_quotes_gpc() => 0。我还尝试了stripslashes($_POST['data']);

这个问题似乎很奇怪,因为数据被php成功转换为json,然后通过javascript解码,但反向操作不工作。

$_POST['data'] value ..在服务器

接收到的JSON字符串不完整
{'"deadline'":'"31 Août 2015'",'"country'":'"Canada'",'"city'":'"Montréal-Est'",'"province'":'"Québec'",'"jobillicoCategory'":'"180'",'"recruiterName'":'"HR Team'",'"recruiterEmail'":'"hr@workland.ca'",'"titleEn'":'"'",'"descriptionEn'":'"'",'"requestId'":'"d4618389-6bb5-5e51-8489-d39a4fc09016'",'"ID'":1996,'"title'":'"Buyer - Planner'",'"description'":'"<p><span lang='''"en-US'''">We are currently looking for an experienced, </span><span lang='''"en-US'''">motivated and ready</span><span lang='''"en-US'''"> buyer-planner, </span><span lang='''"en-US'''">t</span><span lang='''"en-US'''">o take on new challenges. The </span><span lang='''"en-US'''">candidate''s</span><span lang='''"en-US'''"> responsibility </span><span lang='''"en-US'''">is </span><span lang='''"en-US'''">to fulfill and coordinate production planning activities within </span><span lang='''"en-US'''">customer </span><span lang='''"en-US'''">constraints and </span><span lang='''"en-US'''">re</span><span lang='''"en-US'''">quirements </span><span lang='''"en-US'''">in order </span><span lang='''"en-US'''">to ensure </span><span lang='''"en-US'''">customer </span><span lang='''"en-US'''">satisfaction and the achievement of business objectives. In addition, </span><span lang='''"en-US'''">they</span><span lang='''"en-US'''"> will </span><span lang='''"en-US'''">carry out</span><span lang='''"en-US'''"> the p</span><span lang='''"en-US'''">urchasing </span><span lang='''"en-US'''">of components necessary for production, </span><span lang='''"en-US'''">while </span><span lang='''"en-US'''">respecting GMP </span><span lang='''"en-US'''">regulations</span><span lang='''"en-US'''"> and purchasing polic</span><span lang='''"en-US'''">ies</span><span lang='''"en-US'''">. </span></p>''r''n<p>

console.log(JSON.stringify(data))已完成的值

{"deadline":"31 Août 2015","country":"Canada","city":"Montréal-Est","province":"Québec","jobillicoCategory":"180","recruiterName":"HR Team","recruiterEmail":"hr@workland.ca","titleEn":"","descriptionEn":"","requestId":"d4618389-6bb5-5e51-8489-d39a4fc09016","ID":1996,"title":"Buyer - Planner","description":"<p><span lang='"en-US'">We are currently looking for an experienced, </span><span lang='"en-US'">motivated and ready</span><span lang='"en-US'"> buyer-planner, </span><span lang='"en-US'">t</span><span lang='"en-US'">o take on new challenges. The </span><span lang='"en-US'">candidate's</span><span lang='"en-US'"> responsibility </span><span lang='"en-US'">is </span><span lang='"en-US'">to fulfill and coordinate production planning activities within </span><span lang='"en-US'">customer </span><span lang='"en-US'">constraints and </span><span lang='"en-US'">re</span><span lang='"en-US'">quirements </span><span lang='"en-US'">in order </span><span lang='"en-US'">to ensure </span><span lang='"en-US'">customer </span><span lang='"en-US'">satisfaction and the achievement of business objectives. In addition, </span><span lang='"en-US'">they</span><span lang='"en-US'"> will </span><span lang='"en-US'">carry out</span><span lang='"en-US'"> the p</span><span lang='"en-US'">urchasing </span><span lang='"en-US'">of components necessary for production, </span><span lang='"en-US'">while </span><span lang='"en-US'">respecting GMP </span><span lang='"en-US'">regulations</span><span lang='"en-US'"> and purchasing polic</span><span lang='"en-US'">ies</span><span lang='"en-US'">. </span></p>'r'n<p>&nbsp;</p>'r'n<p><strong>Main Responsibilities </strong></p>'r'n<ul>'r'n<li>'r'n<p><a name='"result_box2'"></a><span lang='"en-US'">Carry out product </span><span lang='"en-US'">orders</span><span lang='"en-US'"> from suppliers;</span>;</p>'r'n</li>'r'n<li>'r'n<p><a name='"result_box3'"></a><span lang='"en-US'">Participate in the research, selection, evaluation and validation of suppliers</span>;</p>'r'n</li>'r'n<li>'r'n<p><span lang='"en-US'">S</span><span lang='"en-US'">chedul</span><span lang='"en-US'">e</span><span lang='"en-US'"> orders </span><span lang='"en-US'">according to </span><span lang='"en-US'">clients</span><span lang='"en-US'">'</span> <span lang='"en-US'">needs</span><span lang='"en-US'"> and business objectives</span>;</p>'r'n</li>'r'n<li>'r'n<p><span lang='"en-US'">Research quotes</span><span lang='"en-US'"> and </span><span lang='"en-US'">collect </span><span lang='"en-US'">samples for submissions</span>;</p>'r'n</li>'r'n<li>'r'n<p><a name='"result_box6'"></a><span lang='"en-US'">Perform other duties as required by the company. </span></p>'r'n</li>'r'n</ul>'r'n<p><strong><br />Requirements</strong></p>'r'n<ul>'r'n<li>'r'n<p><span lang='"en-US'">BA</span><span lang='"en-US'">C</span><span lang='"en-US'"> in Operations Management (GOP), Business Administration </span><span lang='"en-US'">in L</span><span lang='"en-US'">ogistic</span><span lang='"en-US'">s</span><span lang='"en-US'"> or other</span>;</p>'r'n</li>'r'n<li>'r'n<p><a name='"result_box8'"></a> <span lang='"en-US'">B</span><span lang='"en-US'">etween one and three years </span><span lang='"en-US'">of </span><span lang='"en-US'">experience in a manufacturing company</span>;</p>'r'n</li>'r'n<li>'r'n<p>Advanced skills in Microsoft Office (Word, Excel);</p>'r'n</li>'r'n<li>'r'n<p>Good knowledge of ERP systems.</p>'r'n</li>'r'n</ul>'r'n<p><strong><br />Skills</strong></p>'r'n<ul>'r'n<li>'r'n<p><a name='"result_box9'"></a> <span lang='"en-US'">Knowledge in the order </span><span lang='"en-US'">of </span><span lang='"en-US'">production and management of raw materials / components</span>;</p>'r'n</li>'r'n<li>'r'n<p><a name='"result_box10'"></a> <span lang='"en-US'">Professionalism, interpersonal skills and strong ability in work organization;</span></p>'r'n</li>'r'n<li>'r'n<p><a name='"result_box12'"></a> <span lang='"en-US'">Resourcefulness and initiative, active listening and understanding customer needs</span>;</p>'r'n</li>'r'n<li>'r'n<p><a name='"result_box13'"></a> <span lang='"en-US'">Good analytical skills, concern for improvement, team spirit, good communication skills and leadership;</span></p>'r'n</li>'r'n<li>'r'n<p>Good negotiation skills.</p>'r'n</li>'r'n</ul>'r'n<p><a name='"result_box14'"></a> <span lang='"en-US'"><br />Join a growing dynamic company located in eastern Montreal. The company offers benefits, continuing education, a dynamic working environment and opportunities for advancement. </span></p>"}

更新好的,我想是'&'nbsp;当json被发送到服务器时,在破坏它的HTML上。如何消毒?encodeURIComponent () ?或替换()?

 function ($http, globals) {
     var request = {
         method: 'POST',
         url: globals.ajax_url,
         headers: {
             'Content-Type': 'application/x-www-form-urlencoded'
         }
     };
     return function (action, data) {
         var queryStr = "action=" + action;
         if (data) {
             queryStr += "&data=" + JSON.stringify(data);
         }
         request.data = queryStr;
         return $http(request);
     };
 }

应该是

echo json_encode($postdata);

$postdata是变量的名称,而不是$data

终于找到解决办法了。我必须添加encodeuriccomponent,因为&,如果没有转义,将会导致问题。

function ($http, globals) {
            var request = {
                method: 'POST',
                url: globals.ajax_url,
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            };
            return function (action, data) {
                var queryStr = "action=" + action;
                if (data) {
                    queryStr += "&data=" + encodeURIComponent(JSON.stringify(data));
                }
                request.data = queryStr;
                return $http(request);
            };