WordPressで文字列を出力する際に必要となってくるエスケープ。
WordPressでよく使用するのが、
- esc_html
- esc_attr
- esc_url
これについての違いをメモしときます。
HTMLタグをエスケープする「esc_html」
例
string esc_html( string $text )
WordPressでHTMLが含まれる可能性のある文字列をechoなどで表示する際には、エスケープする必要があるのですが、「esc_html」はその中でも、変数の中にある特殊文字をHTMLエンティティに変換したテキストとして取得して表示してくれます。
詳細
- < > & ” ‘をエンティティ化する。(「<」→「<;」「>」→「>;」等表示に支障がないように置き換えてくれる。)
表示するだけならこの「esc_html」を使います。
使用例
<?php echo esc_html( $text ) ?>
HTMLタグ属性をエスケープする「esc_attr」
例
string esc_attr( string $text )
要するに、esc_attrは、タグの属性値(特にフォームの値)として出力する際に使用します。
例えば「input」タグの「alt」「value」「title」などの値として出力して使う場合はこちらの esc_attr を使います。
使用例
<?php echo '<input type="text" name="fname" value="' . esc_attr( $_POST['fname'] ) . '">'; ?>
URL文字列として最適化する「esc_url」
URL文字列になっているかを調べて、適切でない場合は取り除き、URL文字列として最適化してくれます。
要するに、URLを出力する際はこちら。
使用例
<?php esc_url( $url, $protocols, $_context ); ?>
詳細
- $protocols は許容されるプロトコルの配列を指定。何も入れなければ ‘http’, ‘https’, ‘ftp’, ‘ftps’, ‘mailto’, ‘news’, ‘irc’, ‘gopher’, ‘nntp’, ‘feed’, ‘telnet’ が適用される。
- $_context は特に指定しなくてよい。
- 3つ引数を指定できますが、最初の $url が指定されて入れば大丈夫とのこと。
このあたりの理解が曖昧になっていました。
きちんと使い分けしていきたいと思います。