2012-01-14 86 views
1

我有一個TinyMCE在我的網站上的實現很好。但是如果用戶輸入一個特殊的字符如「<」,查詢發送到我的MySQL數據庫在出現特殊字符時出現。讓我告訴你什麼happining:TinyMCE + Jquery + PHP + AJAX特殊字符問題

這是我如何調用TinyMCE的:

tinyMCE.init({ 
     mode : "exact", elements : "e_text", theme : "simple", oninit : "setPlainText", plugins : "paste" }); 
     function setPlainText() { 
      var ed = tinyMCE.get('e_text'); 
      ed.pasteAsPlainText = true; 
      if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) { 
       ed.onKeyDown.add(function (ed, e) { 
       if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) 
        ed.pasteAsPlainText = true; 
       }); 
      } else {    
       ed.onPaste.addToTop(function (ed, e) { 
       ed.pasteAsPlainText = true; 
      }); 
      } 
     } 

不要擔心尋找一個錯誤,該代碼使得沒有錯誤TinyMCE的。然後,我有保存ajax的過程jQuery函數:

$("#save-btn").click(function() { 
      tinyMCE.triggerSave(); 
      alert($('#e_text').val()); 
      $("#status").html('<img src="css/img/ajax-loader.gif" align="absmiddle">&nbsp;Saving...'); 
      $.ajax({type: "POST", url: "handler.php", data: "e_text="+ $('#e_text').val() + "&e_title="+ $('#extra_title').val(), 
         success: function(server_response){ 
           $("#status").ajaxComplete(function(event, request){ 
           alert(server_response); 
             if(server_response.substring(0,4) == 'Last') { 
              $("#status").html('<img src="css/img/available.png" align="absmiddle"> <font color="#06699e"> '+ server_response +' </font>&nbsp; '); 
             } 
             else { 
              $("#status").html('<img src="css/img/not_available.png" align="absmiddle"> <font color="red">Not saved, please try again later. '+server_response+'</font>'); 
             } 

           }); 
         } 

       }); 
    }); 

這個叫handler.php至極處理Ajax調用,然後返回結果。對於這個特殊的問題,我修改PHP腳本只是打印POST變種,看看是怎麼回事,或者在其他的手,什麼是抵達PHP腳本:

} elseif(isset($_POST['e_text'])) { 
    $fgmembersite->DBLogin(); 
    echo($_POST['e_text']); 
    mysql_query("INSERT INTO ".table_extra." (id,id_user,title,content) VALUES (NULL,'".$_SESSION['id_of_user']."','".mysql_real_escape_string($_POST['e_title'])."','".mysql_real_escape_string($_POST['e_text'])."') ON DUPLICATE KEY UPDATE title='".mysql_real_escape_string($_POST['e_title'])."', content='".mysql_real_escape_string($_POST['e_text'])."';"); 
    mysql_query("UPDATE ".$fgmembersite->tablename." SET last_update_cv = NOW();"); 
    $result = mysql_fetch_array(mysql_query("SELECT NOW();")); 

    //echo 'Last saved ' . $result['NOW()']; 
} 

忽略一切,但呼應指令。回到我的jQuery代碼,你還記得兩個警報函數嗎?那麼其中一個向我展示了TinyMCE在發送到php腳本之前返回的數據,第二個顯示了由php腳本返回的數據。

讓我們假設我插入「世界,你好你好>>>再次!」到TinyMCE的,這是我所看到的:

enter image description here

然後我打保存,我得到了警示一: enter image description here

我打好吧,我也得到警告二號(服務器響應,PHP什麼了): enter image description here

那麼,爲什麼?爲什麼PHP腳本(只是和它通過POST得到的回聲)正在返回一個裁剪的短語?正當特殊字符出現時?

感謝您爲我提供的任何幫助!

回答

2

這些&符與data屬性的URL格式混淆。 爲什麼不把它改成這樣的東西呢?

data: { 
    "e_text": $('#e_text').val(), 
    "e_title": $('#extra_title').val() 
}