У меня есть реализация 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()']; }
Игнорируйте все, кроме инструкции эха . Возвращаясь к моему коду jquery, вы помните две функции предупреждения? Хорошо, один из них показывает мне данные, возвращаемые TinyMCE, прежде чем отправлять их в php-скрипт, а второй показывает данные, возвращенные данными скриптом php.
Предположим, что я вставляю фразу « Hello world >>> Hello again! » В TinyMCE, вот что я вижу:
Затем я нажал Сохранить, и я получил предупреждение номер один:
Я нахожусь в порядке, и я получаю предупреждение номер два (ответ сервера, какой php получил):
ТАК, ПОЧЕМУ? !!! почему скрипт php (просто и эхо того, что он получает через POST) возвращает фразу? Когда появляется специальный символ?
Спасибо за любую помощь, которую вы можете мне предложить!
Эти амперсанды используют формат URL для свойства data
. Почему бы не изменить его на нечто подобное?
data: { "e_text": $('#e_text').val(), "e_title": $('#extra_title').val() }