2012-03-14 77 views
0

我有一個小問題,在jQuery的jQuery的jQuery數據動態生成,但我的聊天代碼不會工作,如果用戶命中\ &或&或\任何建議 PHP代碼動態創建json,但如何防止&符號(&)和反斜槓()

<? 
header('Content-type: application/json'); 
?> 
{  "items": [ <?php echo $items;?> ]} 
<? 

這不會工作

{ 

     "s": "0", 
     "n":"Praveen Jain", 
     "f": "100025", 
     "m": "\&amp;" 
     }, 

這項工作:

{

"s": "0", 
    "n":"Praveen Jain", 
"f": "100025", 
    "m": "\\&amp;" 
    }, 

有任何幫助......我知道JSON禁止 '\' 和 '&' 這兩個字符

處理JSON

js代碼

function startChatSession(){ 
    $.ajax({ 
     url: "hsdrt/chkat.php?action=startchatsession", 
     cache: false, 
     dataType: "json", 
     success: function(data) { 
     username = data.username; 
     $.each(data.items, function(i,item){ 
      if (item) { // fix strange ie bug 
      chatboxid = item.n; 
         chatboxtitle = item.f; 
        if ($("#chatbox_"+chatboxtitle).length <= 0) 
                {createChatBox(chatboxtitle,chatboxid,1);} 

       if (item.s == 1) 
              {item.n = username;} 

       if (item.s == 2) 
              { 
    $("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxinfo">'+item.m+'</span></div>'); 


    } 
    else { 
$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+item.n+'&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+item.m+'</span></div>'); 

       } 
      } 
     }); 

    for (i=0;i<chatBoxes.length;i++) { 
      chatboxtitle = chatBoxes[i]; 
    $("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight); 
    setTimeout('$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);', 100); // yet another strange ie bug 
     } 
    setTimeout('chatHeartbeat();',chatHeartbeatTime); 
    } 

    }); 
} 
+0

如果你知道這兩個是隻有其中,創建問題,然後創建可以JSON數據之前字符在php – Sumant 2012-03-14 08:33:08

+0

中使用'str_replace'函數改變它們,我試過了,但是沒有運行str_replace('\&','\\&',$ items); – viveksaxena 2012-03-14 09:22:57

+0

試試這段代碼'function convertSpecialChars($ string){ $ string = str_replace(「&」,「&」,$ string); $ string = str_replace('/','//;',$ string); return $ string; }'並且以相同的方式添加你想要修改的字符串 – Sumant 2012-03-14 10:20:45

回答

3

爲什麼不直接使用json_encode? http://sg2.php.net/json_encode 這需要所有關心你的逃避,所以你擔心只是正確地組織你的數據:)

<? 
header('Content-type: application/json'); 
echo json_encode($items); 
?> 

- 編輯 -

結構化你的PHP中的數據,並讓json_encode編碼它,像這樣:

$userdata = array(
    'uid': $uid, 'username': $firstname, 'items': $items 
); 

header('Content-type: application/json'); 
echo json_encode($userdata); 
+0

實際的代碼是這樣的我不知道如何改變{「uid」:「<?php echo $ uid;?>」, 「username 「:」<?php echo $ firstname;?>「, 」items「:[<?php echo $ items;?>] } – viveksaxena 2012-03-14 08:30:53

+0

編輯我的回答 – 2012-03-14 08:33:12

+0

不工作ajax響應是{」uid「:」100045「 ,「用戶名」:「Neha Swar」,「items」:「\ t \ t \ t \ t \ t {\ r \ n \ t \ t \ t \」s \「:\」1 \ \ n \ t \ t \ t \「f \」:\「100020 \」,\ r \ n \ t \ t \ n \「:\」Vivek Chandra \「,\ r \ n \ t \ t \ t \「m \」:\「hi \」\ r \ n \ t},\ t \ t \ t \ t \ t}]} – viveksaxena 2012-03-14 08:50:29

0

使用json_encode() http://ch.php.net/manual/en/function.json-encode.php

看看一個噸編碼第二(選項)參數...

echo json_encode($value, 
    JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | 
    JSON_HEX_AMP | JSON_UNESCAPED_UNICODE 
); 

在PHP 5.4,你可以使用JSON_PRETTY_PRINT ...

+0

我試過JSON_HEX_AMP,JSON_FORCE_OBJECT,JSON_HEX_QUOT他們都沒有工作仍然是相同的結果 – viveksaxena 2012-03-14 09:07:19

+0

@viveksaxena你可以發佈你的整個PHP代碼? – 2012-03-14 10:14:09