終了していない文字列リテラルの一般的なソース[複製]
-
03-07-2019 - |
質問
この質問にはすでに回答があります:
Firefox拡張機能で読み取られて実行されるJavaScriptスクリプトをデバッグしようとしています。 Firebugコンソールを介してのみエラーを見ることができます(私のコードはFirebugには見えません)。<!> quot; unterminated string literal。<!> quot;を報告しています。
行とその周りの行をチェックしましたが、すべてがかっこ、中かっこ、引用符のバランスが取れているようです。他に考えるべき原因は何ですか?
解決
ほとんどのブラウザでは、次のようなコードに問題があるようです:
var foo = "</script>";
Firefox、Opera、およびIE8では、これにより、終了しない文字列リテラルエラーが発生します。スクリプトを含むhtmlコードをシリアル化すると、かなり厄介になる可能性があります。
他のヒント
改行を探してください!多くの場合、これらが原因です。
<!> quot; reputation <!> quot;があれば、jamtodayの回答に投票します
データがPHP経由で送信される場合、これが役立つ場合があります
$str = str_replace(array("\r", "\n"), '', $str);
"<\/script>"
は"</scr"+"ipt>"
と同様に機能するように見えることを発見しました。
JSLint からスクリプトを実行してみてください。
タグクロージャをエスケープするか、ASCIIコードを使用してください
ie
<\/script>
ie
</script>
カット/ペーストを行った場合:一部のオンライン構文ハイライターは、一重引用符と二重引用符をマングルし、フォーマットされた引用符ペア(一致する開始と終了のペア)に変換します。 (私は今のところ例を見つけることができません)...そのため、Command- +を数回押して引用文字を見つめる必要があります
異なるフォントをお試しください、エディターとIDEによって異なるトークナイザーとハイライトルールが使用されますJSは解析するためのより動的な言語の1つなので、emacs、vim、gedit(JSプラグインを使用)でファイルを開いてみてください...運がよければ、そのうちの1つに長い紫色の文字列が表示されますファイル。
サーバー側のコードによって挿入される可能性のある、エスケープされていない一重引用符を含む文字列を探します。
スラッシュ(/)をエスケープしましたか? 以前に問題がありました
Chromebug を試しましたか?拡張機能のFirebugです。
過去(<!>#8216;)に、通常はWordからのコピーアンドペーストによる角度付き引用符で問題が発生しました。それらを通常の単一引用符( ')に置き換えるとうまくいきます。
また、%0Aはエンコードされた改行文字URLであることに注意してください。問題のコードで改行がどこにあるかを見つけるのにしばらく時間がかかりました。
何も解決しない場合は、次のようなユニコード文字を探します
\u2028
これにより、複数行で文字列が壊れてこのエラーがスローされる可能性があります
PHPコードに改行があるためかもしれません。警告ウィンドウのメッセージに改行が必要な場合は、PHPコードの各行の最後にエスケープ構文として改行を含めます。私は通常、次の方法でそれを行います:
$message = 'line 1.\\n';
$message .= 'line 2.';
<!> quot;バイナリ検索<!> quot;を試してください。コードの半分を削除して、もう一度やり直してください。それでもエラーが発生する場合は、残りのコードの半分を削除します。エラーがない場合は、削除したものを元に戻し、その半分を削除します。繰り返す。
かなり迅速に数行に絞り込むことができるはずです。私の経験では、この時点で、馬鹿げた不正な文字列に気付くでしょう。
エラーがどのサーバー側リソースにあるかわからない場合は、ブラウザへのHTML出力の保存バージョンでこれを実行するのが適切な場合があります。
Webページ開発者は、視聴者のブラウザで使用されているエンコーディングについて間違っていると推測しました。これは通常、ページのヘッダーでエンコードを指定することで解決できます。
エラーメッセージで示されている行番号の前にあるコードをスキャンします。終了していないものはすべて、ダウンストリームの何か(非難された行番号)にフラグが付けられます。
Whitespaceは、このエラーの原因となる別の問題です。関数を使用して空白を削除すると役立つ場合があります。
$ str = str_replace(array(<!> quot; \ r \ n <!> quot;、<!> quot; \ n \ r <!> quot;、<!> quot; \ r <!> quot;、<!> quot; \ n <!> quot;)、 '
'、stripslashes($ str));
これは動作するはずです。