2009-12-04 65 views
8

Me he encontrado con un problema donde el usuario ingresa datos y si hay comillas simples, el script falla.Comillas simples en cadena con jQuery ajax

¿Cuál es la mejor manera de manejar las comillas simples que los usuarios ingresan para que no interfiera con el jquery/javascript?

ACTUALIZACIÓN:

estoy enviando a través de Ajax a una base de datos. aquí está el parámetro de datos para una llamada json ajax.
data: "{str_" + sectionName + " :'" + UpdateText + "',EntityID: '" + EntityID + "' }",
con el texto de actualización como la cadena que puede contener las comillas.

+2

Proporcionar un ejemplo de código sería muy útil –

+1

¿Qué estás haciendo con la entrada? –

+0

Lo estoy enviando a través de ajax a una base de datos. aquí está el parámetro de datos para una llamada json ajax. data: "{str_" + sectionName + ": '" + UpdateText + "', EntityID: '" + EntityID + "'}", con el texto de actualización como la cadena que puede contener las comillas. – Adam

Respuesta

3

Usted puede encontrar una de las muchas implementaciones String.replaceAll o escribir su propia, y simplemente reemplazar cualquier comillas simples o dobles con una versión escapado como \" o bien

21

Necesita escaparse de las comillas con un \ o dependiendo de cómo planea usar la cadena, puede usar las funciones javascript escape y unescape.

alert(escape("mike's")); 
alert(unescape(escape("mike's"))); 

también mira esto la manera de escape strings with jQuery

+0

¡Esto funcionó como un encanto! – CodeLikeBeaker

0

Debería desinfectar su entrada dentro de su script del lado del servidor por varias razones. Si solo está mostrando todo lo que el usuario ingresa, entonces su aplicación probablemente se pueda usar para iniciar una secuencia de comandos entre sitios. ataque.

+1

relevante xkcd http://xkcd.com/327/ – thenoviceoof

+0

Creo que su problema es que está recibiendo un error de javascript, del lado del cliente, al intentar enviar datos al servidor. –

0

Javascript tiene un método integrado solo para esto que cubre más que solo comillas simples. Se llama encodeURIComponent, desde Javascript Kit:

utiliza para codificar la porción de un parámetro URI de caracteres que tienen un significado especial, para separarlos de los caracteres reservados como "&" que actúan como separadores de clave/valor. Más inclusivo que encodeURI(), codifica todos los caracteres con un significado especial en una cadena de URL, incluidos "=" y "&". Use este método solo en la parte del parámetro de un URI; de lo contrario, el URI puede dejar de ser válido si contiene uno de los caracteres que son parte de un URI válido (es decir: "+") pero debe ser escapado si forma parte del parámetro URI.

Así que el código debe convertirse:

data: "{str_" + encodeURIComponent(sectionName) + " :'" + encodeURIComponent(UpdateText) + "',EntityID: '" + encodeURIComponent(EntityID) + "' }", 

puedo codificar todo lo que envío en una cadena de consulta para estar seguro, pero que codifica la EntityID posiblemente podría ser omitido, ya que no viene desde el usuario (Estoy asumiendo), para que sepa que no tendrá caracteres especiales.

+2

encodeURI y encodeURIComponent no escaparán de comillas simples, al menos no en las versiones actuales de Chrome/Safari –

0

Gracias a mbrevoort, elaboro más en su respuesta

cuando está enviando una comilla simple en un empid consulta = "T'via" empid = de escape (empid)

cuando obtiene el valor que incluye una sola cotización var xxx = solicitud.Cadena de consulta ("empid") xxx = unscape (xxx)

Si desea buscar/insertar el valor que incluye una comilla simple en un xxx consulta = Reemplazar (empid, """ " ''")

0

para escapar de una comilla simple en Javascript utilizar

UpdateText.replace('\'', '\\\'') 

Para escapar de todas las comillas simples utilizan

UpdateText.replace(/'/g, '\\\'') 
3

Para escapar de los valores en la solicitud de AJAX, no escriba su propia aplicación de correo scape o use el método escape().(escape() está en desuso). En su lugar, cree un objeto JSON y use el método JSON.stringify.

Para su caso, debe ser como (ignorando propiedad dinámica por ahora):

//Create Javascript object  
var obj = { SectionName: UpdateText, EntityID: EntityID }; 

Más adelante en su petición Ajax que puede hacer:

data: JSON.stringify(obj), 

Si desea utilizar dinámico propiedades con su objeto JSON para su caso particular puede crear el objeto en dos pasos como:

var obj = { EntityID: EntityID }; 
obj["str_" + sectionName] = UpdateText; 

Esta práctica le evitará el escapado manual de comillas simples/dobles y otros caracteres no válidos. JSON.stringify se encargará de eso.

(Vine aquí en busca de un tema algo similar, pero no pudo encontrar una solución de trabajo adecuado, por lo que terminó la publicación de uno aquí)

1

Ya que menciona AJAX, hay una posibilidad de que las cuerdas la participación de comillas simples está siendo rechazada en el lado del servidor. Asegúrese de utilizar escape string function provisto, por ejemplo por php, antes de insertar cadenas, en la base de datos.

$user_name = $_REQUEST['username']; 
$user_name = mysqli_real_escape_string($conn,$user_name); 
$query = "INSERT into chat(username,message) VALUES('".$user_name."')"; 

Esto ayuda a escapar de las comillas simples o dobles que pueden aparecer en la cadena '$ nombre_usuario'. ¡También previene contra cualquier tipo de ataques de inyección SQL!

Cuestiones relacionadas