-7

次のような JavaScript コードがあります。

 quotes = [];
 quotes[quotes.length] = "ABC quote";
 quotes[quotes.length] = "DEF quote";
 ...

特に行の1つは次のとおりです。

quotes[quotes.length] = "Mark Twain said, &apos;The secret source of humor itself is not joy but sorrow.  There is no humor in Heaven.&apos;<br /><a href=\"/pain\/">Humor Delivers Pain</a>";

Chrome は、アポストロフィを ' に置き換えることに対処しようとした 100 行を超える行について不平を言っています。ただし、この行についてはまだ問題があり、構文の強調表示では明らかに開始の二重引用符が表示されず、正規表現/pain/">Humor Delivers Pain</のみが表示されます。

このような正規表現文字列はボイラープレート部分文字列ですが、その式の前にあるものはすべて文字列として意図したとおりに強調表示されます。前の行と同様に、次のように読み取ります。

quotes[quotes.length] = "The author was shaped by M.K. Gandhi. Here is why he is taking leave of Gandhi.<br /><a href=\"/gandhi/\">Farewell to Gandhi</a>";

これには、引用符内に正規表現リテラルが含まれている可能性がありますが、意図したとおりに解釈され、エスケープされた引用符を含む二重引用符で囲まれた文字列として解釈されます。

これを試しているページはhttp://JonathansCorner.com/firestorm/です。ページの上部に通知を印刷し、リンクを変更することを目的としています。現在、マーク・トウェインの引用を意図した行でクラッシュしています。

Firefox は、ステートメントの前にセミコロンがないとして、Twain の引用について苦情を申し立てています。それがどこから来ているのかわかりません。これは、上位の引用による二次的な損害でしょうか?

JavaScript 自体はhttp://jonathanscorner.com/include/deprecation_notice.jsにあります。

- 編集 -

@Lightness、問題は、直前の行とエラーが描画された行の 2 行のサンプルに現れます。次の場所に、以前のスクリプト行が示されている同じエラーがあります。

quotes = [];
quotes[quotes.length] = "The author was shaped by M.K. Gandhi. Here is why he is taking leave of Gandhi.<br /><a href=\"/gandhi/\">Farewell to Gandhi</a>";
quotes[quotes.length] = "Mark Twain said, &apos;The secret source of humor itself is not joy but sorrow.  There is no humor in Heaven.&apos;<br /><a href=\"/pain\/">Humor Delivers Pain</a>";
4

1 に答える 1

5
<a href=\"/pain\/">

2 番目の二重引用符はエスケープされません。\"ありません/"

これらの引用符をプレーン テキスト ファイルまたはデータベースに保存し、自動的にエスケープする方がおそらく信頼性が高いでしょう。手で大量のテキストをエスケープするのは面倒です。

于 2012-12-31T18:36:46.087 に答える