Распространенные источники незаконченного строкового литерала [дубликат]
-
03-07-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
Я пытаюсь отладить скрипт JavaScript, который считывается в расширении Firefox и выполняется.Я могу видеть ошибки только через консоль Firebug (мой код невидим для Firebug), и он сообщает о "незавершенном строковом литерале".
Я проверил строку и линии вокруг нее, и все кажется прекрасным - круглые скобки и кавычки сбалансированы и т.д.Каковы другие возможные причины, которые я должен искать?
Решение
Похоже, что у большинства браузеров возникают проблемы с подобным кодом:
var foo = "</script>";
В Firefox, Opera и IE8 это приводит к ошибке unterminated string literal.Может быть довольно неприятно при сериализации html-кода, который включает скрипты.
Другие советы
Следите за перерывами на линии!Они часто являются причиной.
Я бы проголосовал за ответ jamtoday, если бы у меня была "репутация".
Если ваши данные поступают с помощью PHP, это может помочь
$str = str_replace(array("\r", "\n"), '', $str);
Я только что обнаружил, что "<\/script>"
похоже, работает так же хорошо, как "</scr"+"ipt>"
.
Вы могли бы попробовать запустить скрипт через JSLint.
Просто избегайте закрытия тега или используйте ascii-код
ie
<\/script>
ie
</script>
Если вы сделали какие-либо вырезки / вставки:некоторые онлайн-маркеры синтаксиса искажают одинарные и двойные кавычки, превращая их в форматированные пары кавычек (совпадающие пары открытия и закрытия).(хотя я не могу найти никаких примеров прямо сейчас)...Таким образом, это влечет за собой нажатие Command- + несколько раз и просмотр ваших символов цитаты
Попробуйте другой шрифт? кроме того, разные редакторы и IDE используют разные токенизаторы и правила выделения, а JS - один из более динамичных языков для синтаксического анализа, поэтому попробуйте открыть файл в emacs, vim, gedit (с плагинами JS)...Если вам повезет, один из них покажет длинную фиолетовую строку, проходящую через конец файла.
Найдите строку, которая содержит неэкранированный одиночный qoute, который может быть вставлен каким-либо кодом на стороне сервера.
Вы избежали косых черт ( / )?У меня уже были проблемы с этим раньше
Вы пробовали Хромированный Жучок?Это Firebug для расширений.
В прошлом у меня были проблемы с угловыми кавычками ( ‘ ), обычно при копировании и вставке из Word.Замена их обычными одинарными кавычками ( ' ) делает свое дело.
Кроме того, имейте в виду, что %0A - это URL-кодированный символ перевода строки.Мне потребовалось некоторое время, чтобы найти, где был перевод строки в моем коде-нарушителе.
Если ничего не помогает, поищите некоторые символы uni-code, такие как
\u2028
это может привести к разрыву вашей строки более чем на одну строку и возникновению этой ошибки
Может быть, это потому, что у вас есть разрыв строки в вашем PHP-коде.Если вам нужны разрывы строк в вашем сообщении окна предупреждения, включите его в качестве экранированного синтаксиса в конце каждой строки вашего PHP-кода.Обычно я делаю это следующим образом:
$message = 'line 1.\\n';
$message .= 'line 2.';
Попробуйте "бинарный поиск".Удалите половину кода и повторите попытку.Если ошибка все еще присутствует, удалите половину оставшегося кода.Если ошибки там нет, поместите то, что вы удалили, обратно и удалите половину этого.Повторяю.
Вы должны быть в состоянии довольно быстро сузить его до нескольких строк.Мой опыт показывает, что на этом этапе вы заметите какую-то глупую искаженную строку.
Возможно, будет целесообразно выполнить это с сохраненной версией HTML-вывода в браузере, если вы не уверены, к какому серверному ресурсу относится ошибка.
Разработчик веб-страницы неправильно определил, какая кодировка используется браузером зрителя.Обычно это можно решить, указав кодировку в заголовке страницы.
Сканируйте код, который приходит до того , как строка #, упомянутая в сообщении об ошибке.Все, что не было обработано, привело к тому, что что-то ниже по потоку (обвиняемая строка #) было помечено.
Пробелы - это еще одна проблема, которую я нахожу, вызывающая эту ошибку.Может помочь использование функции для обрезки пробелов.
$str = str_replace(массив("
", "
", "
", "
"), '
', косые черты ($str));
Это должно сработать.