Foros del Web » Programando para Internet » Javascript »

Escape de comillas simples

Estas en el tema de Escape de comillas simples en el foro de Javascript en Foros del Web. Buenas, haber si me podeis hechar un cable porque ya no me quedan pelos en la cabeza que arrancarme. Mi problema reside a la hora ...
  #1 (permalink)  
Antiguo 20/01/2012, 07:46
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 10 años, 5 meses
Puntos: 17
Escape de comillas simples

Buenas, haber si me podeis hechar un cable porque ya no me quedan pelos en la cabeza que arrancarme.

Mi problema reside a la hora de escapar comillas simples en un onclick que genero mediante PHP. Lo hago de la siguiente forma

Primero ingreso en la base de datos la cadena de texto introducida mediante un input type text, para evitar problemas de sql inyection y tal, lo convierto todo con la siguiente funcion:

Código:
function guardar_texto($str){
$str = htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8");
return $str;
}
Hasta aqui no hay problema alguno.
Ahora cuando quiero mostrar la información de forma plana (es decir directamente en la web) la muestro sin mas con un echo y el navegador interpreta sin problemas las comillas y demas caracteres extraños convertidos con el htmlentities(). (tengo correctamente configurado la meta de la codificacion).

Ahora aqui surge mi problema, cuando intento cargar esta información dentro de un onclick que ejectuta un confirm().

Para empezar, si paso el valor obtenido desde la base de datos, como este fue tratado con el htmlentities(), al realizar el confirm, aparece todo el texto sin formatear, como es logico, para que aparezca el texto correctamente uso la siguiente funcion


Código:
function mostrar_texto($str){
	$str = html_entity_decode($str, ENT_QUOTES | ENT_IGNORE, "UTF-8");	
	$str = addslashes($str);
	return $str;
}

El uso de addslashes(); lo realizo, para evitar tener problemas con las comillas dentro del onclick->confirm(), pero no consigo hacer que escapen las comillas simples.

la estructura del onclick es la siguiente

Código:
<a href='administracion.php?con=7&id=<?=$row['id_noticia']?>' onclick='if(!confirm("Se borrará la noticia con titulo: <?=mostrar_texto($row['titulo_noticia'])?>"))return false'>Eliminar Noticia</a>
_
Lo que mas me trae de cabeza es que si miramos el codigo fuente generado aparece asi en el ejemplo que trabajo

Código:
<a href='administracion.php?con=7&id=21' onclick='if(!confirm("Se borrará la noticia con titulo: ¡Cámleon! ¿Oso Panda? \"donde estaran\" \'las 7 bolas\'"))return false'>Eliminar Noticia</a>
_
Y aunque yo entiendo que usando las barras de escape deberia fomarse bien la estructura y no haber conflicto, me arroja error y la estructura se rompe justo en la primera comilla simple (interprantado atributos que forma con las palabras de despues de la comilla).

He probado ya todo lo que se me ha ocurrido, y he quemado el google buscando infomacion y en toda me corroboran que de esta forma (uso de addslashes(); desde php para crear los escapes) deberia ejecutarse correctamente mi sentencia de javascript, pero no es asi.

Si alguien tiene una idea sobre esto, aunque no sea una solucion, pero si un aporte o una referencia que me pueda poner sobre el camino correcto, se lo agradecere considerablemente.

Un saludo a la comunidad.
  #2 (permalink)  
Antiguo 20/01/2012, 12:14
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.596
Antigüedad: 17 años, 7 meses
Puntos: 1277
Respuesta: Escape de comillas simples

Hola:

Las comillas simples son & #39; y las dobles & #34; (sin el espacio separador)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 23/01/2012, 02:37
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 10 años, 5 meses
Puntos: 17
Respuesta: Escape de comillas simples

Hola caricatos gracias por dedicarme algo de tu tiempo.

El problema que tengo con las comillas en parte esto que me dices, a ver si me explico bien.

Si cargo dentro del onclick, en la llamada al confirm la información traida con de la bbdd formateada con htmlentities(). Precisamente es asi como se me muestra en el mensaje del confirm, en lugar de aparecer las comillas simples o doble, me aparecen estos numeros, ya que javascript no hace una interpretación del codigo html.

Por el contrario si la formateo normal (aplicandole html_entity_decode() ) para que en lugar de aparecer como codigo (& #39; & #34; ó &quot; [dependiendo de la codificación] ) aparezca el texto tal cual debe aparecer en el confirm, la etiqueta se me rompe al hacer aparición la comilla simple (la etiqueta se cierra con comillas simple tambien en el codigo).

Para evitar este problema en teoria, existe la función addslashes() en php, que lo que hace es devolverme la cadena que le pase, con las barras invertida (\) para escapar los caracteres especiales, como las comillas simples o dobles.

Pero como ya indique en mi primer post, aunque la funcion hace bien su trabajo (añade las barras de escape), el codigo se me sigue rompiendo, y no escapan las comillas simples (la doble curiosamente si). Y es justo aqui donde me desconcierta el asunto.

Un saludo, y gracias de nuevo por el interes.
  #4 (permalink)  
Antiguo 09/12/2012, 02:26
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 7 años, 5 meses
Puntos: 0
Respuesta: Escape de comillas simples

Para poder reemplazar las comillas simples o se vean bien, tenés que usar la función htmlspecialcharts() y definir ENT_QUOTES

Yo tenía el mismo problema y lo solucioné

[URL="http://php.net/manual/es/function.htmlspecialchars.php"]http://php.net/manual/es/function.htmlspecialchars.php[/URL]

Saludos

Etiquetas: comillas, escape, funcion, google, html, input, php, simples
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:29.