我有一個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"> 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變種,看看是怎麼回事,或者在其他的手,什麼是抵達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的,這是我所看到的:
然後我打保存,我得到了警示一:
我打好吧,我也得到警告二號(服務器響應,PHP什麼了):
那麼,爲什麼?爲什麼PHP腳本(只是和它通過POST得到的回聲)正在返回一個裁剪的短語?正當特殊字符出現時?
感謝您爲我提供的任何幫助!