2009-03-06 8 views
9

のJavaScriptの一重引用符と二重引用符を使用していますhrefのJavaScript関数内の一重引用符と二重引用符をエスケープする際に問題があります。hrefの

このJavaScriptコードはhrefです。二重引用符内の二重引用符が有効でないため、

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

、私はそれが文字列の一部として扱われるため、内部二重引用符をエスケープする必要があります - - それは同様だ ので、私はこれを行う必要があります -

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

問題は、上記のコードが機能していないことです。 - myFunc(

私も一重引用符を使ってみましたが、それでもうまくいきません。つまり、文字列リテラルの中に一重引用符があると、コードが切り詰められます)。

これは、私は単一引用符でやったことです:

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

これは動作しますが、私は、文字列内の単一引用符を持っているならば、コードは二重引用符1の場合と同じように切り捨てられます。

答えて

28

引用符をエスケープするためにバックスラッシュを使用するのはJavaScriptでどのように動作するかですが、実際にはJavaScriptコードを記述していません.HTMLを記述しています。 HTMLのエスケープ方法:文字エンティティを使用して、これを行うことができます。例えば

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

<a href="javascript: alert('John O&#39;Brien says &quot;Hi!&quot');">...</a> 
+2

私はまだをエスケープする必要があると思います。いったんhtmlが解析されると、エンティティの値は '他の平凡な罪属性内に引用符を付ける。それは 'alert( 'John O \ ' Brienは"と言っている);' – JeremyWeir

-1

通常、この種のコードは問題なく働いている:

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

をこのコードを使用すると、任意の問題を抱えているのですか?

+0

はい、彼のテキストは引用符(シングルとダブル) – nickf

1

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

他のところで述べたように、HTMLエンティティは、コードがHTMLに埋め込まれていると可能性があります。しかし、JavaScriptソースファイルの文字列の引用符をエスケープする必要があるので、JavaScriptを扱うための一貫した戦略を立てることが最善です。

この戦略に従い、HTMLに埋め込まれたJavaScriptに二重引用符を埋め込むと、HTMLエンティティ&をそのまま使用してください。

0

誰もがこのようにいくつかのことをエスケープする必要がある場合:

<a href="www.google.com/search?q="how+to+escape+quotes+in+href""</a> 

あなたは二重引用符%22のためのASCIIコードを使用することができます。

<a href="www.google.com/search?q=%22how+to+escape+quotes+in+href%22"</a> 

あなたはJavaScriptにリンクを渡す場合には特に便利ですPHPから