TinyMCE + Jquery + PHP + AJAX Problema de caracteres especiales

Tengo una implementación TinyMCE en mi sitio web que funciona muy bien. Pero si el usuario ingresa un carácter especial como “<", el envío de consultas a mi base de datos MySQL se recorta justo cuando aparece el carácter especial . Déjame mostrarte lo que está pasando:

Así es como llamo 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; }); } } 

No se preocupe por buscar un error allí, ese código representa el TinyMCE sin errores. Luego tengo una función jquery que contiene el proceso 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+''); } }); } }); }); 

Esta llamada handler.php que maneja la llamada ajax y luego devuelve un resultado. Para este problema particular, modifico el script php solo para imprimir el POST var y ver qué está pasando, o en otras manos, qué está llegando al script 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()']; } 

Ignora todo excepto la instrucción de eco . Volviendo a mi código jquery ¿recuerdas las dos funciones de alerta? Bueno, uno de ellos me muestra los datos devueltos por TinyMCE antes de enviarlos al script php y el segundo muestra los datos devueltos por el script php.

Supongamos que inserto la frase ” Hola mundo >>> ¡Hola otra vez! ” En el TinyMCE, esto es lo que veo:

enter image description here

Luego presiono Guardar, y obtuve la alerta número uno: enter image description here

Toqué el botón Aceptar y recibí la alerta número dos (la respuesta del servidor, lo que obtuvo php): enter image description here

¡¡¡¿ENTONCES POR QUÉ?!!! ¿Por qué el script php (solo y eco de lo que obtiene a través de POST) está devolviendo una frase recortada? Justo cuando aparece el char especial?

¡Gracias por cualquier ayuda que me puedan ofrecer!

Esos símbolos están jugando con el formato de URL para la propiedad de data . ¿Por qué no cambiarlo a algo como esto en su lugar?

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