Fuentes comunes del literal de cadena sin terminar [duplicado]


Esta pregunta ya tiene una respuesta aquí:

Estoy tratando de depurar un script JavaScript que se lee en una extensión de Firefox y se ejecuta. Solo puedo ver errores a través de la consola Firebug (mi código es invisible para Firebug), y está reportando una " cadena sin terminar literal."

Revisé la línea y las líneas a su alrededor y todo parece estar bien: paréntesis, llaves y comillas están equilibradas, etc. ¿Cuáles son otras posibles causas que debería estar buscando?

Author: Brock Adams, 2008-10-23

19 answers

La mayoría de los navegadores parecen tener problemas con código como este:

var foo = "</script>";

En Firefox, Opera e IE8 esto resulta en un error literal de cadena sin terminar. Puede ser bastante desagradable al serializar código html que incluye scripts.

 56
Author: VoY,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-03 12:32:02

¡Busca saltos de línea! Esas son a menudo la causa.

 55
Author: jamtoday,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-23 07:39:52

Votaría por la respuesta de jamtoday si tuviera la "reputación"

Si sus datos vienen a través de PHP, esto podría ayudar

$str = str_replace(array("\r", "\n"), '', $str);
 23
Author: PJ Brunet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-07 02:59:23

Acabo de descubrir que "<\/script>" parece funcionar tan bien como "</scr"+"ipt>".

 18
Author: Queue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-14 18:02:08

Puede intentar ejecutar el script a través de JSLint.

 8
Author: Andrew Hedges,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-22 21:30:35

Simplemente escape los cierres de su etiqueta o use código ascii

Ie

<\/script>

Ie

<&#47;script>
 7
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-30 21:51:44

Si ha hecho algún corte/pegado: algunos resaltadores de sintaxis en línea destrozarán comillas simples y dobles, convirtiéndolas en pares de comillas formateadas (pares de apertura y cierre coincidentes). (aunque no puedo encontrar ningún ejemplo en este momento)... Así que eso implica golpear Comando - + un par de veces y mirar fijamente a los caracteres de la cita

Pruebe con una fuente diferente? además, diferentes editores e IDE usan diferentes tokenizadores y reglas de resaltado, y JS es uno de los lenguajes más dinámicos para analizar, así que intente abrir el archivo en emacs, vim, gedit (con plugins JS)... Si tienes suerte, uno de ellos mostrará una larga cadena púrpura que se ejecuta a través del final del archivo.

 4
Author: Gene T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:55

Busque una cadena que contenga un qoute único no registrado que pueda ser insertado por algún código del lado del servidor.

 4
Author: Manu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-11 13:44:25

¿Has escapado de tus barras hacia adelante( / )? He tenido problemas con ellos antes

 2
Author: meouw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-23 10:34:26

¿has probado Chromebug? Es el Incendiario de las extensiones.

 1
Author: Álvaro González,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-31 14:33:18

He tenido problemas con las citas en ángulo en el pasado ( ' ) generalmente de copiar y pegar desde Word. Reemplazarlos con comillas simples regulares ( ' ) hace el truco.

 1
Author: cbaigorri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-27 16:57:22

También, tenga en cuenta que %0A es la URL de caracteres de alimentación de línea codificada. Me llevó un tiempo encontrar dónde había un linefeed en mi código ofensivo.

 1
Author: Tyndareus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-08 12:52:38

Si nada ayuda, busque algunos caracteres uni-code como

\u2028

Esto puede romper su cadena en más de una línea y lanzar este error

 1
Author: Predte4a,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-13 16:34:47

Tal vez sea porque tienes un salto de línea en tu código PHP. Si necesita saltos de línea en su mensaje de ventana de alerta, inclúyalo como una sintaxis de escape al final de cada línea en su código PHP. Normalmente lo hago de la siguiente manera:

$message = 'line 1.\\n';
$message .= 'line 2.';
 1
Author: Ipsoratio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-05 21:02:28

Intente una "búsqueda binaria". Borra la mitad del código e inténtalo de nuevo. Si el error sigue ahí, borra la mitad del código restante. Si el error no está ahí, vuelva a poner lo que eliminó y elimine la mitad de eso. Repetir.

Debería ser capaz de reducirlo a unas pocas líneas con bastante rapidez. Mi experiencia ha sido que en este punto, notarás alguna estúpida cuerda malformada.

Puede ser conveniente realizar esto en una versión guardada de la salida HTML en el navegador, si no estoy seguro de en qué recurso del lado del servidor se encuentra el error.

 0
Author: Chase Seibert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-23 01:03:21

El desarrollador de la página web se equivocó sobre qué codificación es utilizada por el navegador del espectador. Esto generalmente se puede resolver especificando una codificación en el encabezado de la página.

 0
Author: Windows programmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-23 01:26:10

Escanee el código que viene antes de la línea# mencionada por el mensaje de error. Lo que no está terminado ha resultado en algo aguas abajo, (la línea culpada#), para ser marcado.

 0
Author: Chris Noe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-23 16:32:19

El espacio en blanco es otro problema que encuentro, causa este error. Usar una función para recortar el espacio en blanco puede ayudar.

 0
Author: Lea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-31 14:05:50

$str = str_replace(array("\r\n","\n\r","\r", "\n"), '
', stripslashes($str));

Esto debería funcionar.

 -3
Author: Vishal Venugopal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-19 07:39:36