esc_url()とesc_url_raw()の違い


9

http://core.trac.wordpress.org/browser/trunk/wp-includes/formatting.php#L2239

どちらを使用するかについて混乱しています。

私がこのURLを持っていると仮定します:http://site.com/?getsomejavascript=1動的に生成されるJavaScript:

  • スクリプトをに含めた場合esc_url(add_query_arg('apples', 420))、取得さhttp://site.com/?getsomejavascript=1&apples=420れ、それらの#038;参照が原因で壊れます

  • 私が使用する場合esc_url_raw(add_query_arg('apples', 420))、正しいURLを取得します:http://site.com/?getsomejavascript=1&apples=420

しかし、ドキュメントでは、esc_url_rawはデータベースに挿入されたURLをエスケープするためにのみ使用する必要があることがわかりました...

回答:


10

データ検証のコーデックスエントリから:URL

esc_url( $url, (array) $protocols = null ) (2.8以降)

URLをサニタイズするとき(テキストノード、属性ノード、またはその他の場所)は常にesc_urlを使用します。提供されているホワイトリストプロトコルのいずれもないURLを拒否し(デフォルトはhttp、https、ftp、ftps、mailto、ニュース、irc、gopher、nntp、feed、およびtelnet)、無効な文字を削除し、危険な文字を削除します。3.0以降非推奨:clean_url()この関数は、文字をHTMLエンティティとしてエンコードします。(X)HTMLまたはXMLドキュメントを生成するときに使用します。アンパサンド(&)および単一引用符( ')を数値エンティティ参照(&、')としてエンコードします。

esc_url_raw( $url, (array) $protocols = null ) (2.8以降)

データベースにURLを挿入します。この関数は、文字をHTMLエンティティとしてエンコードしません。URLを格納する場合や、エンコードされていないURLが必要な場合に使用します。この機能は、$ contextをdbに設定することにより、古いclean_url関数で複製できます。

したがって、主な違いは次のようになります。

  1. esc_url()HTMLエンティティをエンコードしますが、エンコードしesc_url_raw()ません
  2. esc_url()以下のために意図されて 出力しながら、esc_url_raw()のために意図されたデータベース・ストレージ

編集:

クエリ文字列から実際のURLをハードコーディング(または個別に保存/保存)し、クエリ文字列をを介し[add_query_arg()][2]て追加しているため、追加したクエリ文字列をを介してエスケープする方がesc_js()esc_url()

例えば:

add_query_arg( esc_js( 'apples' ), esc_js( '420' ), $myurl )

2
esc_url()わかりましたが、出力したいURLにクエリ引数がある場合、は正しく機能しません
onetrickpony

を使用esc_js()して追加されたデータだけをエスケープするのはadd_query_arg()どうですか?上記の回答の編集を参照してください。
チップベネット

私は試しませんでしたが、意味がありません:) esc_js( 'apples')または 'apples'の両方が返されapplesます。問題は、「apples」を他の引数と結合したときのadd_query_argにあります&
onetrickpony

次に、データが信頼されている(つまり静的である)場合、なぜまったくエスケープするのでしょうか。
チップベネット

脱出しないのが安全かどうか、私には完全にはわかりません。基本的には次のようなスクリプトを使用しています<script type="text/javascript" src="<?= $_SERVER['REQUEST_URI'] ?>'/?javascriptcode=1"></script>
onetrickpony
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.