web-dev-qa-db-ja.com

WP_User_QueryでLIKE用語をエスケープする必要がありますか?

WP_User_Query を使用して部分文字列検索を検索しているうちに、この 答え を見つけました。 Stackexchangeですばらしい回答をいくつか提供している@kaiser。しかし、esc_attrを使ってLIKEの用語('search' => '*' . esc_attr( $your_search_string ) . '*')をエスケープするのは混乱しました。

私は、WP_User_Queryがそのようなエスケープが不要で無駄な行使である場合には、準備文を利用すると思います。私は正しいですか?

次に、エスケープ処理を実行する必要があるとしても、 like_escape() の方が目的に適していませんか。

1
John

like_escape() は、%および_文字のみをエスケープします。関数全体は次のようになります。

function like_escape($text) {
   return str_replace(array("%", "_"), array("\\%", "\\_"), $text);
}

コーデックスからの引用、 esc_attr()

<、>、&、 "および '(小なり、大なり、アンパサンド、二重引用符、一重引用符)の文字をエンコードします。エンティティを二重エンコードすることはありません。

alt、value、titleなどのHTML属性(特にフォーム値)をエスケープするときに常に使用します。

(私の強調)

さらに詳しく: データ検証

追加するように編集された - 質問の最初の部分には触れませんでした:( WP_User_Query それ自身のデータ検証、それでは、本当にesc_attr()を使う必要があるのでしょうか。

WP_User_Queryのコーデックスページは、データの検証が行われているかどうかにかかわらず、一方向にも他方向にも言っているようには見えません。 (validescapeを検索しても何も表示されません。)これはesc_attr()ページからのメモと組み合わせると - "エンティティーは二重にエンコードされません" - 私に示します渡す値にesc_attr()を使用しても問題ありません。特に信頼できないユーザー提供のデータを使用した場合は、申し訳ありませんが、より安全です。

1
Pat J