通常、表示する前にURLをエスケープするにはesc_url()
を使用します。その 'URL'がデータURI(例えば'data:image/svg+xml;base64,...'
)である場合、それはesc_url()
によって空白にされます。
データ検証のコーデックスページ では、URLのエスケープについて次のように説明しています 。
URLをサニタイズするときは常にesc_urlを使用します(テキストノード、属性ノード、その他の場所)。提供されているホワイトリストプロトコル(http、https、ftp、ftps、mailto、news、irc、Gopher、nntp、feed、telnetにデフォルト設定されている)のいずれも持たないURLを拒否し、無効な文字を削除し、危険な文字を削除します。 3.0で廃止予定のclean_url()を置き換えます。
データURIはこの関数では扱われず、他の標準のWPエスケープ関数でも扱われないようです。
WordPressでデータURIをエスケープするための確立されたベストプラクティスはありますか?
許可されたプロトコルを含む配列を esc_url() 関数に渡すことは可能です。データURLの場合、デフォルトで wp_allowed_protocols() でホワイトリストに登録されていないため、これにはdata
スキームを含める必要があります。
esc_url( $data_url, array( 'data' ) );
データURIは、あまりよくないlしかし、それはは属性です。属性内でエスケープするにはesc_attr
を使用し、それ以外の場所ではesc_html
を使用します。そのエスケープが重要なのは、あなたが何を期待しているのかを示すことです。 URLが必要な場合はesc_url
を、属性の場合はesc_attr
を、HTMLのないテキストの場合はesc_html
などを使用してください。
esc_url
も同じように動作しますが、最初にプロトコルを強制するなどの追加の規則があります。