Solución:
Como se mencionó en los comentarios de su publicación original, supongo que está usando CKEditor y en su función jQuery ready (o en algún lugar después de que se cargue el documento) reemplaza un área de texto con una instancia de editor. A CKEditor, como a la mayoría de los editores WYSIWYG le gusta reformatear el texto que le pasa, haciéndolo marcado válido, reemplazando caracteres especiales con entidades HTML, envolviendo su contenido en un párrafo, etc. Esto significa que aunque no ha cambiado nada, el original y el contenido reformateado puede ser diferente.
La inicialización de la instancia del editor se retrasa y probablemente ocurra después de que haya serializado su formulario. Aun así, CKEditor no está fuertemente vinculado con el área de texto (ahora oculta) desde la que se creó, debe llamar a la función updateElement del editor para eliminar todos los cambios. Por lo general, lo hace automáticamente al enviar el formulario, por eso está obteniendo el contenido reformateado en su controlador de envío.
Por lo tanto, solo debe asegurarse de llamar a la función updateElement antes de serializar por primera vez, para lo cual el mejor lugar es después de que se haya cargado el editor. Afortunadamente, hay un evento para eso, asumiendo el siguiente marcado HTML:
<form id="myForm">
<textarea name="test" id="myEditor">My random text</textarea>
</form>
Función jQuery ready:
$(function(){
function SerializeForm(){
// Make sure we have the reformatted version of the initial content in the textarea
CKEDITOR.instances.myEditor.updateElement();
// Save the initial serialization
form_data.edit_initial = $('#myForm').serialize();
}
// You might as well leave it here in case CKEditor fails to load
form_data.edit_initial = $('#myForm').serialize();
// Create editor instance
CKEDITOR.replace('myEditor');
// Tap into CKEditor's ready event to serialize the initial form state
CKEDITOR.instances.myEditor.on("instanceReady", SerializeForm);
});
¡Gracias! He tenido problemas desde hace mucho tiempo con CKEditor textarea. No podría cambiar el valor sin un envío en cakephp.
Pero ahora todo funciona. Tuve que llamar updateElement
antes de serialize
como esto:
CKEDITOR.instances.SurveyBody.updateElement();
var formData = $("#surveyForm").serialize();