2015-06-02 334 views
0

由於某種原因我有一個所見即所得的編輯器生成的HTML json字段的問題。PHP null返回與json_decode

我正在使用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(數據)返回給服務器來更新帖子時,問題就在發生。當我嘗試在服務器上執行json_decode($ _ POST ['data'])時,我得到以下PHP錯誤,這是由於data.description的HTML內容而發生的。沒有data.description我的代碼工作正常更新後

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

但在Javascript中,當我做的console.log(JSON.stringify(數據))和驗證JSON數據是好的。我沒有使用魔術配額get_magic_quotes_gpc()=> 0。我也試過stripslashes($ _ POST ['data']);

這個問題似乎很奇怪,因爲數據已成功轉換爲json的PHP,然後通過JavaScript解碼,但反向操作無法正常工作。當在服務器收到

{\"deadline\":\"31 Août 2015\",\"country\":\"Canada\",\"city\":\"Montréal-Est\",\"province\":\"Québec\",\"jobillicoCategory\":\"180\",\"recruiterName\":\"HR Team\",\"recruiterEmail\":\"[email protected]\",\"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(數據)),其是完整

$ _POST [ '數據']值.. JSON字符串是不完整的

{"deadline":"31 Août 2015","country":"Canada","city":"Montréal-Est","province":"Québec","jobillicoCategory":"180","recruiterName":"HR Team","recruiterEmail":"[email protected]","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。如何從nbsp;消毒? 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); 
    }; 
} 
+2

'$ _POST ['data']'的實際值是多少? – ceejayoz

+0

檢查[json_last_error](http://php.net/manual/en/function.json-last-error.php)爲任何json解碼錯誤(非常可能爲畸形的json等..) –

+0

發佈您的JavaScript代碼是將數據發送回PHP。 – Augwa

回答

0

應該

echo json_encode($postdata); 

$postdata是變量的名稱,而不是$data

+0

沒有那只是一個錯誤的部分代碼是罰款 – ericsicons

0

終於找到了解決方案。 我不得不添加encodeURIComponent,因爲& nbsp;通過tinymce WYSIWYG添加 - 在查詢字符串中會導致問題,如果不逃脫。

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); 
      };