2012-01-14 127 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() 
}