我的网站上有一个 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('<img src="css/img/ajax-loader.gif" align="absmiddle"> 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> ');
}
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 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代码,你还记得两个警报功能吗?好吧,其中一个向我展示了TinyMCE在将其发送到php脚本之前返回的数据,第二个展示了由php脚本返回数据的数据。
让我假设我在TinyMCE中插入短语“ Hello world&gt;&gt;&gt; Hello Hello!”,这就是我所看到的:
然后我点击了Save,我得到了第一个警报:
我点击确定,我得到警报号码2(服务器响应,php得到了什么):
那么,为什么?!!!为什么php脚本(只是和它通过POST得到的回声)返回一个裁剪短语?就在出现特殊字符时?
感谢您提供给我的任何帮助!
答案 0 :(得分:2)
那些&符号正在弄乱data
属性的URL格式。
为什么不把它改成这样的呢?
data: {
"e_text": $('#e_text').val(),
"e_title": $('#extra_title').val()
}