TinyMCE + Jquery + PHP + AJAX特殊字符问题

我的网站上有一个TinyMCE实现,效果很好。 但是如果用户输入一个像“<”这样的特殊字符,那么发送到我的MySQL数据库的查询就会在特殊字符出现时被裁剪。 让我告诉你什么是幸福的:

这就是我称之为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没有错误。 然后我有一个jquery函数来保存ajax进程:

  $("#save-btn").click(function() { tinyMCE.triggerSave(); alert($('#e_text').val()); $("#status").html(' 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('  '+ server_response +'   '); } else { $("#status").html(' Not saved, please try again later. '+server_response+''); } }); } }); }); 

这个调用handler.php处理ajax调用然后返回一个结果。 对于这个特殊的问题我修改php脚本只是为了打印POST var并看看发生了什么,或者在其他人手中,到达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()']; } 

忽略除了echo指令之外的所有内容。 回到我的jquery代码,你还记得两个警报function吗? 好吧,其中一个向我展示了TinyMCE在将其发送到php脚本之前返回的数据,第二个展示了由php脚本返回数据的数据。

让我假设我在TinyMCE中插入短语“ Hello world >>> Hello Hello! ”,这就是我所看到的:

在此处输入图像描述

然后我点击保存,我得到警报号码1: 在此处输入图像描述

我点击了确定,我得到警报号码2(服务器响应,php得到了什么): 在此处输入图像描述

所以为什么?!!! 为什么PHP脚本(只是通过POST获得的回声)返回一个裁剪短语? 就在特殊字符出现的时候?

感谢您提供给我的任何帮助!

那些&符号正在弄乱data属性的URL格式。 为什么不把它改成这样的东西呢?

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