2012-03-21 18 views
7

sé que esto va a ser algo simple que estoy solo falta alguna manera, pero aquí va:ColdFusion/Javascript escapar las comillas sencillas

Tengo una aplicación ColdFusion donde el usuario puede introducir texto en varias pantallas. Tengo una función de javascript que verifica el texto ingresado con lo que está almacenado en la base de datos y aparece una ventana de confirmación preguntándoles si quieren guardar/descartar cambios.

Si el texto ingresado por el usuario contiene comillas (simples o dobles), el javascript muere por completo. Necesito escapar de las citas mientras mantengo la capacidad de verificar si el contenido coincide.

He intentado las funciones escape() y replace() (por separado y juntas), pero nada funciona.

Ejemplo javascript:

function change_question(){ 
    var feedback = document.getElementById('feedback').value; //this is what the user has entered on the page 
    var stored_feedback = "#trim(StoredFeedback)#"; //this is what is stored in the database; retrieved via ColdFusion 

    if (feedback != stored_feedback) { 
     if (confirm('You have unsaved data on the page. Do you wish to discard your changes?')) { 
      //go to next page 
     } 
    } 
    else { 
      //go to next page 
    } 
} 

Gracias.

+0

Si hay una utilidad de codificación JSON, úselo. – Pointy

Respuesta

12

el construido en jsStringFormat escapará JavaScript

var stored_feedback = "#jsStringFormat(StoredFeedback)#"; 
+0

Esto es perfecto, gracias Sam! Una pregunta, ¿cómo puedo usarla en la variable de retroalimentación (es decir, qué ha ingresado el usuario?) – shimmoril

+0

Editar: No importa, me di cuenta: 'var feedback_string = document.getElementById ('feedback'). Value; var feedback = #jsStringFormat ('feedback_string') #; ' – shimmoril

0

No sé ColdFusion pero de acuerdo con los documentos:

var stored_feedback = #SerializeJSON(trim(StoredFeedback))#; 

I piensan que no es necesario añadir las citas de forma explícita, como una cadena cuando serializado a JSON debe terminar con comillas dobles de todas formas. Nuevamente, no puedo probar esto yo mismo.

+0

Los caracteres hash en los anteriores son innecesarios. –

+0

@DavidFaber en realidad? ¿Cómo sabría ColdFusion que eso debería interpretarse como su código y no como JavaScript? – Pointy

+2

Se necesitan los caracteres hash. Creo que David estaba pensando que la línea prevista estaba en un contexto de CF, pero está en un contexto de JavaScript destinado para su uso dentro de cfoutput –

0

Si está buscando una solución de ColdFusion, probablemente querrá utilizar esto:

HTMLEditFormat(string) 

cadena de cadena HTML-escapado. Los caracteres de retorno se eliminan; los caracteres de alimentación de línea se conservan. Los caracteres con significados especiales en HTML se convierten a entidades de caracteres HTML como >.

+0

Gracias. Todo lo que va y viene del DB está usando HTMLEditFormat, pero los datos ingresados ​​por el usuario (no guardados) fueron realmente el problema. – shimmoril

+0

El escapado de HTML no es útil cuando el valor se va a generar en código JavaScript. – Pointy

Cuestiones relacionadas