WEB制作のための情報サイト / unazuki Library

esc_url()

基本構文と使い方(引数・実行結果)

基本構文

URLをエスケープし、安全な文字列として出力します。また、URLとして適切でない形式の場合、自動的に適切なURLの形式に補完します。例えば指定したURLにhttpsがない場合、自動的にhttpsを補完して完全なURLにします。

esc_url($url,$protocols,$_context);

引数

引数必須/任意引数に指定するもの
第1引数
$url
必須エスケープしたいURL(文字列)
第2引数
$protocols
任意許可するプロトコルの配列(https、ftp、mailtoなど)
初期値null
第3引数
$_context
任意初期値display
※初期値のまま使います(displayは表示用として使うことを意味します)

実行結果

戻り値(返す値):エスケープされたURLを返します。
※表示するにはechoします。

例1.URLをエスケープしなかった場合

下記の例では、scriptが実行されてしまいます。

$url = 'https://example.com<script>alert("危険なスクリプト!");</script>';
echo $url;

結果:「危険なスクリプト!」というアラートをブラウザに表示

例2.URLをエスケープした場合

下記の例では、URLが適切にエスケープされるため、scriptは実行されません。

$url = 'https://example.com<script>alert("危険なスクリプト!");</script>';
echo esc_url($url);

結果:https://example.comscriptalert(危険なスクリプト!);/script

例3.不完全なURLをエスケープした場合

下記の例では、不完全なURLを補完して完全なURLにしています。

$url_imcomplete = 'example.com';
echo esc_url($url_imcomplete,['https']);

結果:https://example.com

学習者向け補足情報

【引数とは】
テンプレートタグ(=関数)を実行する際に、引数を渡すことができるテンプレートタグがあります。引数は、関数の中で使われるので、渡す引数の値によって実行結果が変わってきます。何を処理したいのか、どのようなデータを取得したいのかによって渡す引数が変わります。

【引数について】

  • 指定できる引数の数はテンプレートタグによって異なります。(引数なしもあり)
  • 引数ごとに必須 / 任意が決まっています。(必須は必ず指定、任意は指定しなければ初期値)
  • 引数名(例:$post)は仕様の便宜上の名前と考えてください。(この名前自体はテンプレートタグ実行に関係しません。各引数に何を指定するのかを理解していればOKです。)

よくある使い方

home_url()でトップページのURLを取得した後、エスケープ処理をしてから表示しています。

<a href="<?php echo esc_url(home_url('/')); ?>">トップページ</a>

※当サイトでは初期値とデフォルト値の言葉の定義を区別せず、原則統一して初期値を採用しています。

関連するテンプレートタグ

テンプレートタグ 説明
antispambot() エンティティ化したメールアドレスを返します。
esc_html() HTMLをエスケープし、安全な文字列として出力します。
esc_attr() 属性値をエスケープし、安全な文字列として出力します。