2

URLを返すジェネリック関数があります。(これは、プラグイン内のリソース[画像、スタイルシート]にURLを返すプラグイン関数です)。

これらのURLでGETパラメーターを使用します。

HTMLページ内でこれらのURLを使用する場合、W3C検証に合格するには、アンパサンドを&としてマスクする必要があります。

/plugin.php?plugin=xyz&resource=stylesheet&....

しかし、URLをAJAX呼び出しの「url」パラメーターとして使用したい場合、アンパサンドが正しく解釈されず、呼び出しが台無しになります。

何かを取得できますか?AJAX呼び出しで動作しますか?

このプラグインモデルは何度も(そしておそらく多くの人が)再利用するので、URL生成関数(intendedUse = "ajax"など)にパラメーターを追加したり、JavascriptでURLを操作したりすることは避けたいと思います。できるだけシンプルにしたい。

4

4 に答える 4

3

アプリケーションの1つの部分が複数のレイヤーにまたがるという問題に直面しているように思われます。この場合、それはプラグインです。

RFC 1738で指定されているURLは、URLがトークンを使用&してキーと値のペアを互いに分離する必要があることを示しています。ただし、アンパサンドはHTMLで予約されているトークンであるため、にエスケープする必要があります&。アンパサンドのエスケープはHTMLのアーティファクトであるため、プラグインがアンパサンドを直接エスケープしてはならない可能性があります。代わりに、HTMLマークアップに埋め込むことができるように、正規URLをエスケープする関数などを用意する必要があります。

于 2009-11-16T22:48:48.453 に答える
1

これが実際に発生する可能性が高い唯一の場所は、次の場合です。

  • XHTMLの使用
  • text/htmlとして提供
  • インラインを使用する<script>

これは幸せな組み合わせではなく、解決策は仕様に含まれています。

スクリプトで<または&または]]>または-を使用する場合は、外部スクリプトを使用してください。

XHTMLメディアタイプノートには同じアドバイスが含まれていますが、無視することを選択した場合の回避策も提供します。

于 2009-11-16T22:28:28.630 に答える
0

フォームのマークアップがある場合:

<a href="?a=1&amp;b=2">

hrefその場合、属性の値はです?a=1&b=2。これ&amp;はHTML/XMLのエスケープシーケンスにすぎず、属性の値には影響しません。これは次のようになります。

<a href="&lt;&gt;">

属性の値はです<>

代わりに、次の形式のコードがある場合:

<script>
var s = "?a=1&b=2";
</script>

次に、JavaScript関数を使用できます。

<script>
var amp = String.fromCharCode(38);
var s = "?a=1"+amp+"b=2";
</script>

これにより、そうでなければ有効なHTMLのみまたは有効なXHTMLのみであるコードを両方で有効にすることができます。(詳細については、Dorwaldのコメントを参照してください。)

于 2009-11-16T22:29:35.663 に答える
0

文字列だけでなくJSONを返すようにしてください。そうすれば、JavascriptがURL値をオブジェクトとして読み取ることができ、その問題は発生しないはずです。それ以外の場合は、次のようなものを使用して、文字列をHTMLでデコードしてみてください。

function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}; 

明らかに、作成する可能性のあるDOM要素への参照をすべて削除する必要があります(例を簡略化するためにここでは行いません)。

私は自分の職場で作成したAJAXサイトでこの手法を使用しており、この問題を解決するために何度も使用しています。

于 2009-11-16T22:34:48.883 に答える