web-dev-qa-db-ja.com

終了していない文字列リテラルの一般的なソース

Firefox拡張機能で読み取られて実行されるJavaScriptスクリプトをデバッグしようとしています。 Firebugコンソール経由でのみエラーが表示され(私のコードはFirebugには見えません)、「未終了の文字列リテラル」を報告しています。

行とその周りの行を確認しましたが、すべてがかっこ、中かっこ、引用符のバランスが取れているようです。他に考えるべき原因は何ですか?

53
sutee

ほとんどのブラウザには、次のようなコードに関する問題があるようです。

var foo = "</script>";

Firefoxでは、OperaおよびIE8により、終了しない文字列リテラルエラーが発生します。スクリプトを含むhtmlコードをシリアル化すると、かなり厄介になる可能性があります。

62
VoY

改行を探してください!多くの場合、これらが原因です。

57
jamtoday

「評判」があれば、jamtodayの答えに投票します。

データがPHP経由で送信されている場合、これが役立つ場合があります

$str = str_replace(array("\r", "\n"), '', $str);
23
PJ Brunet

"<\/script>""</scr"+"ipt>"と同様に機能するように見えることを発見しました。

20
Queue

JSLint でスクリプトを実行してみてください。

8
Andrew Hedges

タグクロージャをエスケープするか、ASCIIコードを使用するだけです

すなわち

<\/script>

すなわち

<&#47;script>
8
Brian

サーバー側のコードによって挿入される可能性のあるエスケープされていない一重引用符を含む文字列を探します。

5
Manu

カット/ペーストを行った場合:一部のオンライン構文ハイライターは、一重引用符と二重引用符をマングルし、フォーマットされた引用符ペア(一致する開始と終了のペア)に変換します。 (私は今のところ例を見つけることができません)...したがって、Command- +を数回押して、引用文字を見つめる必要があります

異なるフォント? を試してくださいプラグイン)...運がよければ、そのうちの1つはファイルの終わりまで実行される長い紫色の文字列を表示します。

4
Gene T

何も役に立たない場合は、次のようなユニコード文字を探してください

\u2028

これにより、複数の行で文字列が破損し、このエラーがスローされる場合があります

2
Predte4a

過去に角度付き引用符( ')で問題が発生しました。通常はWordからのコピーアンドペーストです。それらを通常の単一引用符( ')に置き換えるとうまくいきます。

2
cbaigorri

また、%0Aはエンコードされた改行文字URLであることに注意してください。問題のコードで改行がどこにあるかを見つけるのにしばらく時間がかかりました。

2
Tyndareus

スラッシュ(/)をエスケープしましたか?私は前にそれらに問題がありました

2
meouw

PHPコードに改行があるためかもしれません。警告ウィンドウのメッセージに改行が必要な場合は、PHPコードの各行の最後にエスケープ構文として改行を含めてください。私は通常、次の方法でそれを行います:

$message = 'line 1.\\n';
$message .= 'line 2.';
2
Ipsoratio

Chromebug を試しましたか?拡張機能のFirebugです。

1

来るコードをスキャンしますbeforeエラーメッセージで言及された行番号。終了していないものはすべて、ダウンストリームの何か(非難された行番号)にフラグが付けられます。

0
Chris Noe

「バイナリ検索」を試してください。コードの半分を削除して、再試行してください。それでもエラーが発生する場合は、残りのコードの半分を削除します。エラーがない場合は、削除したものを元に戻し、その半分を削除します。繰り返す。

かなり迅速に数行に絞り込むことができるはずです。私の経験では、この時点で、馬鹿げた不正な文字列に気付くでしょう。

エラーがどのサーバー側リソースにあるのかわからない場合は、ブラウザーに保存されたHTML出力のバージョンでこれを実行すると便利な場合があります。

0
Chase Seibert

Webページの開発者は、視聴者のブラウザで使用されているエンコーディングが間違っていると推測しました。これは通常、ページのヘッダーでエンコードを指定することで解決できます。

0

ホワイトスペースは私が見つけた別の問題であり、このエラーの原因です。関数を使用して空白を削除すると役立つ場合があります。

0
Lea