12

hrefs JavaScript 関数内の一重引用符と二重引用符のエスケープに問題があります。

の中にこの JavaScript コードがありhrefます。それはまるで -

<a href = "javascript:myFunc("fileDir/fileName.doc", true)"> click this </a>

ここで、二重引用符内の二重引用符は有効ではないため、文字列の一部として扱われるようにするには、内側の二重引用符をエスケープする必要があります-したがって、これを行う必要があります-

<a href = "javascript:myFunc(\"fileDir/fileName.doc\" , true)"> click this </a>

問題は、上記のコードでさえ機能しないことです。JavaScript コードが切り捨てられています -- myFunc(

一重引用符のバリエーションも試してみましたが、それでもうまくいかないようです (つまり、文字列リテラル内に一重引用符があると、コードが切り捨てられます)。

これは私が一重引用符で行ったことです:

<a href = 'javascript:myFunc("fileDir/fileName.doc" , true)'> click this </a>

これは機能しますが、文字列内に一重引用符があると、二重引用符と同じようにコードが切り捨てられます。

4

4 に答える 4

34

バックスラッシュを使用して引用符をエスケープするのは、JavaScript での動作ですが、実際には JavaScript コードを記述しているのではなく、HTML を記述しています。HTML エスケープ メソッドを使用してそれを行うことができます: 文字エンティティ。

&quot;  // "
&#39;   // '

例えば:

<a href="javascript: alert('John O&#39;Brien says &quot;Hi!&quot');">...</a>
于 2009-03-06T07:01:15.107 に答える
1

一般的なベストプラクティスとして、HTMLでは二重引用符を使用し、JavaScriptでは一重引用符を使用します。それはあなたの問題のほとんどを解決します。JavaScript文字列に一重引用符が必要な場合は、\'を使用してエスケープできます。おそらく、リテラル文字列をそれより深くネストするべきではありません。

他の場所で述べたように、コードがHTMLに埋め込まれている場合、HTMLエンティティが可能です。ただし、JavaScriptソースファイル内の文字列内の引用符のエスケープを処理する必要があるため、JavaScriptを処理するための一貫した戦略を用意するのが最善です。

この戦略に従っていて、JavaScriptに二重引用符が埋め込まれてHTMLに埋め込まれている場合は、HTMLエンティティ&quot;を使用してください。

于 2011-05-28T03:06:06.367 に答える
-1

通常、この種のコードは問題なく動作します。

<a href="#" onclick="myFunc('...')">Click this</a>

このコードで問題はありませんか?

于 2009-03-06T07:01:47.523 に答える