Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/01/2012, 07:46
kikeking1
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 15 años, 6 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.