アーカイブ

‘プログラミング’ タグのついている投稿

PHPで連想配列からセレクトボックスを生成する自作関数

2010 年 11 月 16 日 コメントはありません

以前に作成したので忘備録として。

毎回毎回セレクトボックスのHTMLを書くのが面倒だったので関数化してみました。

続きを読む…

カテゴリー: プログラミング タグ: ,

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

2010 年 7 月 1 日 コメント 4 件

もう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の物を再現してみました。)

カテゴリー: プログラミング タグ: ,