ホーム > プログラミング > PHPのヒアドキュメント内で関数(htmlspecialchars等)を利用する方法

PHPのヒアドキュメント内で関数(htmlspecialchars等)を利用する方法

2010 年 7 月 1 日 コメントをどうぞ コメント

もう7月です。
今年も半分が終わってしまいました(^ω^;)

たまにはプログラミングっぽい話題を。

PHPで開発をやっていて「これは便利!」と思い、
現在も愛用している方法を紹介してみます。
(改めてググってみてもすぐには見つからなかったので(^ω^;))

PHPで開発を行っている際に
echoで複数行を出力したくなる場合があるかと思います。
(複数行を変数へ代入したい場合も含みます。)

そういった場合、私はヒアドキュメントを用います。

また、以下のようにヒアドキュメント内で
変数を展開できる機能は非常に有用です。

PHPソース:

<?php
$tempstr = ‘2行目’;
 
echo <<< EOT
1行目<br />
{$tempstr}<br />
3行目
EOT;

?>

出力:

1行目
2行目
3行目

ただし、関数は展開されないため、
htmlspecialchars等を利用したい場合に困ります。

PHPソース:

<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
 
echo <<< EOT
1行目<br />
{htmlspecialchars($tempstr)}<br />
3行目
EOT;

?>

出力:

1行目
{htmlspecialchars(2行目)}
3行目

これでは、$_GETや$_POSTで受け取ったデータを出力する際に困ってしまいます。
安全に出力するためには以下のように記述します。

PHPソース:

<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
$tempstr = htmlspecialchars($tempstr);
 
echo <<< EOT
1行目<br />
{$tempstr}<br />
3行目
EOT;

?>

出力:

1行目
<a href=”http://www.google.com/”>2行目</a>
3行目

こうする事で安全に出力できはしますが
正直な所、出力したい変数が多い場合は面倒ですよね。
もっとスマートに記述したい所です。

そこで、htmlspecialcharsをクラス化し変数に代入してみます。
実際には以下のようなコードをPHPソースに追加します。

PHPソース:

<?php
class HSC_Class {
  public function enc($output){
    return htmlspecialchars($output);
  }
}
$hsc = new HSC_Class();
?>

すると、以下のような形で記述できるようになります。

PHPソース:

<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
 
echo <<< EOT
1行目<br />
{$hsc->enc($tempstr)}<br />
3行目
EOT;

?>

出力:

1行目
<a href=”http://www.google.com/”>2行目</a>
3行目

いかがでしょうか。
事前にhtmlspecialcharsを通す必要がなくなった分、
PHPソースが分かりやすく簡素になったと思いませんか。

「$hsc->enc()」とする事により、
クラス「HSC_Class」内の関数「enc」を呼び出している事になります。

このように、
1. 必要な関数をクラス化
2. 作成したクラスを変数へ代入
3. ヒアドキュメント内で変数から関数を呼び出し
とすることにより、ヒアドキュメント内で関数が利用できます。

よろしければお試しくださいね。

そうそう、PHPの開発にはEclipseがお勧めです。
(メモリに余裕があればAll in Oneパッケージが便利です。)
初期設定が多少面倒ですが、それさえ乗り越えればかなり快適です(^ω^ )
(ちなみに、上記のPHPコード部分の配色はEclipseの物を再現してみました。)

カテゴリー: プログラミング タグ: ,
  1. こう
    2010 年 7 月 2 日 20:58 | #1

    すいません 質問です

    私はAxfc Downloader Plusを今日見つけたんですけど
    2009年で開発が終わってるので使えるのかわかりません

    ちゃんと使えますか?

  2. タツヤ
    2010 年 7 月 4 日 15:37 | #2

    ご利用頂けますので是非お試しください。
    (しばらく更新を行っていない理由は、
    Axfc Uploader側で仕様変更が行われていないためです。)

  3. pechipu
    2010 年 11 月 9 日 14:48 | #3

    メソッドはいけるんですね!盲点でした。><
    知らなかったー!これは超便利ですね。
    ありがとうございますー!

  4. タツヤ
    2010 年 11 月 11 日 00:47 | #4

    自分も初めて知った時は目から鱗でしたw
    お役に立てましたら幸いです。

  1. 2012 年 10 月 9 日 12:50 | #1
  2. 2015 年 7 月 6 日 12:19 | #2