2011-02-03 13 views
2

一部のサイトでJavaScriptのescape()とunescape()関数を同じ意味で使用していました。JavaScript:エスケープとエスケープの比較

使用されている一部:

document.write('<img height="1" width="1" style="border-style:none;" alt="" src="..."/>'); 

、これもかなり一般的であったのに対し(注:彼らの最初の "エスケープ" 文字列は、 "アンエスケープ" それ):

document.write(unescape('%3Cimg%20height%3D%221%22%20width%3D%221%22%20style%3D%22border-style%3Anone%3B%22%20alt%3D%22%22%20src%3D%22...%22/%3E')); 

後者がいるようです前者と同じように、より長い道のりしか使わない。これら2つの方法の違いは何ですか?

答えて

1

この例では明確ではありません。しかし、<script>または</script>を含むインラインスクリプトを文字列の中に入れることはできません。そうしないと、ブラウザはスクリプトタグのように処理します。

htmlのエスケープとエスケープ解除は、この問題を回避します。より良い解決策は、HTML文書とは別のファイルにスクリプトを置くことです。あなたがアンエスケープまたは連結'<' + 'div...'を使用するか、またはあなたが検証に合格するためにスクリプトブロック内//<![CDATA[ ... //]]>を追加するよう

+0

ある一般的な使用例は、特定の条件に応じて異なるスクリプト/ピクセルを呼び出すことです。 例: if(条件A){/ *呼び出しスクリプト#1 * /} else {/ *呼び出しスクリプト#2 * /} – moey

0

は、XHTML準拠のためには、スクリプトブロック内の任意のHTMLタグ(<div></div>または<img />)を持つことができません。

0

JavaScriptの改行や同様の引用符は、パーサを壊します。

var test = "This "string", for example."; 

バックスラッシュエスケープが内蔵なので、これは動作しますされています

var test = "This \"string\", for example."; 

しかし、その後、あなたが「エスケープする機能を見つける必要があるだろう、」、\ nは、\ rを、とから他の回答に加え<と>。

エスケープ()は、すでにほとんどの英数字以外の文字を削除する文字列を符号化し、アンエスケープ())(エスケープを元に戻します。

escape("It's > 20% less complicated this way.") 

"それ%27S%20%3E%2020パーセント25%20less%20complicated%20this%20way。"

エスケープスペースがあなたを気にする場合は、試してみてください。

escape("It's > 20% less complicated this way.").replace(/%20/g, " ") 

「それは、%27S%3Eこのように複雑になりにくい20%25」

関連する問題