気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。

PHPプログラミングの教科書 [php1st.com]

<?php echo esc_url( home_url( '/' ) ); ?>の解釈

投稿日:

WordPressテンプレートを開いてトップページへのリンクを作成しているコードを探すと <?php echo esc_url( home_url( '/' ) ); ?> のようなコードが見つかります。

トップページのURLを出力しているコードですが、どの部分が何をしているのか1つずつ説明します。

トップページのURLを取得するhome_url

home_url関数はトップページのURL(例:http://example.com/)を取得するときに使います。

たとえば、「home_url('/')」のように記述すると、トップページのURLに「/」を付加した文字が作成されます。単純に「home_url()」とすると「/」は付きません。

【参考】テンプレートタグ/home url - WordPress Codex 日本語版

URLをエスケープするesc_url

esc_url関数はURLをエスケープした文字を返します。エスケープとは、セキュリティ的に問題のない文字に加工する処理だと思ってください。そのまま出力されると問題のある文字を安全なフォーマットに加工したり除去して無害化(サニタイズ)します。

「esc_url(home_url('/'))」と記述すると、トップページのURLをエスケープした結果が返されます。

どのような効果があるのか簡単な例で説明します。たとえば、次のようなコードを実行するとします。

<?php
echo ('http://example.com/<script>alert("危険なコマンド");</script>');
?>

危険なコマンドを含むJavaScriptがそのまま実行されてしまいます。

危険なコマンドが実行されてしまう

危険なコマンドが実行されてしまう

これはマズいので次のようにesc_urlを通してエスケープする必要があります。

<?php
echo esc_url('https://example.com/<script>alert("危険なコマンド");</script>');
?>

出力結果は次のようになります。scriptタグなどが削除されてJavaScriptが無効になるので危険なコマンドは実行されません。

http://example.com/scriptalert(危険なコマンド);/script

【参考】関数リファレンス/esc url - WordPress Codex 日本語版

画面に文字を表示するecho

echoは画面に文字を表示するPHPの命令です。たとえば、「echo "テスト";」で画面に「テスト」と表示されます。

「echo esc_url(home_url('/'));」と記述すると、トップページへのURLが出力されます。その文字をHTMLタグ(aタグ)のhref属性に指定することで、トップページへのリンクが作成されます。

<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>

(Twenty Seventeenのtemplate-parts/header/site-branding.phpより)

まとめ

ここまでに使った命令をまとめておきます。

  • home_url関数でトップページのURLを取得
  • esc_url関数でURLをエスケープ
  • echoでURLをhref属性に出力

PHPの基礎が身に付いたかチェックするなら

PHP「直す力」養成ドリル

-WordPressのPHP

Copyright© PHPプログラミングの教科書 [php1st.com] , 2018 All Rights Reserved Powered by AFFINGER5.