Foros del Web » Programando para Internet » Javascript »

Error: unterminated string literal

Estas en el tema de Error: unterminated string literal en el foro de Javascript en Foros del Web. Buenas gente, tengo un pequeño problemita con JS y es que estoy intentando volcar a un array una serie de STRINGS (En HTML) volcados desde ...
  #1 (permalink)  
Antiguo 24/04/2010, 18:02
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Exclamación Error: unterminated string literal

Buenas gente, tengo un pequeño problemita con JS y es que estoy intentando volcar a un array una serie de STRINGS (En HTML) volcados desde la base de datos, con "En HTML" me refiero a que esos strings pueden perfectamente contener codigo HTML como <p>,<table>, etc.

Bien, el problema reside en que vuelco los seis últimos registros de una DB en MySQL y por algún motivo el ultimo registro me sale ese error en la consola de Firefox, cuando tiro a llamar la función que me muestra esos datos en la pagina, me dice que la función no existe.

textos[6] = '<div class...';
---------^

Ahi marca el error, entre la comilla simple y el menor que del div.

Ya he estado leyendo por el foro en busca de una solución pero no he dado con nada solido.
  #2 (permalink)  
Antiguo 25/04/2010, 06:16
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Error: unterminated string literal

Si trabajas con php del lado del servidor, podrías usar esto para evitar ese problema:
http://www.forosdelweb.com/2846915-post4.html
Se trata de realizar un escape hexadecimal de lo que obtienes de la base de datos o de lo que sea, para luego usar la cadena escapada en un innerHTML o en donde necesites que javascript lo muestre.

Muchas veces, cuando sugiero esto, no termino de dejar en claro lo que estoy diciendo, así que agregaré un ejemplo.
Si usás lo siguiente obtendrás un error semejante al que estás describiendo (unterminated string litera):
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
title>Documento sin t&#237;tulo</title>
<script>
onload=function(){
    
document.getElementById('player').innerHTML='
    <object width="304" height="182">
    <param name="movie" value="http://www.youtube.com/v/6Nt391Y6ZeI?f=user_uploads&amp;app=youtube_gdata&amp;hl=es_ES&amp;fs=1&amp;">
    <param name="allowFullScreen" value="true">
    <param name="allowscriptaccess" value="always"><param name="wmode" value="transparent">
    <embed src="http://www.youtube.com/v/6Nt391Y6ZeI?f=user_uploads&amp;app=youtube_gdata&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="304" height="182">
    </object>'
;
}
</script>
</head>

<body>
<div id="player"></div>
</body>
</html> 
Pero, si en cambio usás esto, no obtendrás ningún error y el resultado será el esperado:
Código PHP:
<?php  
function js_encode($s){ 
    
$texto=''
    
$lon=strlen($s); 
    for(
$i=0;$i<$lon;++$i){ 
        
$num=ord($s[$i]); 
        if(
$num<16$texto.='\x0'.dechex($num); 
        else 
$texto.='\x'.dechex($num); 
    } 
    return 
$texto

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
<script>
onload=function(){
    document.getElementById('player').innerHTML='<?php echo  js_encode('<object width="304" height="182">
    <param name="movie" value="http://www.youtube.com/v/6Nt391Y6ZeI?f=user_uploads&amp;app=youtube_gdata&amp;hl=es_ES&amp;fs=1&amp;">
    <param name="allowFullScreen" value="true">
    <param name="allowscriptaccess" value="always"><param name="wmode" value="transparent">
    <embed src="http://www.youtube.com/v/6Nt391Y6ZeI?f=user_uploads&amp;app=youtube_gdata&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="304" height="182">
    </object>'
?>';
}
</script>
</head>

<body>
<div id="player"></div>
</body>
</html>

Última edición por Panino5001; 25/04/2010 a las 06:50 Razón: aclarar

Etiquetas: string
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 10:11.