• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:条件に該当した時にだけhtmlを出力するいい方法)

条件に該当した時にだけhtmlを出力するいい方法

このQ&Aのポイント
  • 条件に該当した場合にのみ、スマートな方法でHTMLを出力するにはどうすれば良いでしょうか?
  • 過去のプロジェクトで同様の問題に直面した方は、どのような解決策を見つけましたか?
  • タイトルに「条件に該当した時にだけhtmlを出力するいい方法」と記述しました。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.1

「制御構造に関する別の構文」と「echo短縮構文」を利用してこういうのはどうでしょうか。Smartyを使えるなら使うべきだと思いますが、そういったものが無くてもPurePHPだけでスマートに書ける方法として私は愛用しています。 制御構造に関する別の構文 http://www.php.net/manual/ja/control-structures.alternative-syntax.php echo http://www.php.net/manual/ja/function.echo.php (備考) $_GET, $_POSTなどを受け取る際の処理 http://qiita.com/mpyw/items/2f9955db1c02eeef43ea <?php function h($str) {  return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } $name = filter_input(INPUT_GET, 'name'); if ($name !== null) {  if ($name == '') { /* FALSE を含めたいためわざと === ではなく == を使用 */   $msg = '名前は1文字以上入力してください';  } else {   $msg = "こんにちは、{$name}さん";  } } header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <body> <?php if (isset($msg)): ?>  <p><?=h($msg)?></p> <?php endif; ?>  <form method="get" action="">   名前: <input type="text" name="name" value="<?=h($name)?>">   <input type="submit" value="送信">  </form> </body> </html>

pringlez
質問者

お礼

あ。私が求めていたのはこれです。 # <?php if (isset($msg)): ?> #  <p><?=h($msg)?></p> # <?php endif; ?> PHP開発経験が無く個人で作っているので、人に聞くことも人のソースを見ることもできないので苦労していたのですが、助かりました。あらためて見ると普通のことなのに…。 あと、h関数などは実践的で参考になりました。※JavaScriptでjQueryなどのライブラリを使っていないときに、「document.getElementById」を「$」に書き換えるみたいに流行ってるんですかね? また「(備考) $_GET, $_POSTなどを受け取る際の処理」も参考になりました。 ありがとうございました

pringlez
質問者

補足

>Smartyを使えるなら使うべきだと思いますが あぁ、そうなんですかね。私のイメージでは、Smartyは「テンプレートに対し部分的に値を埋め込むもの」という感じです。 私がやりたいのは「部分的に値を埋め込む」という感じの部分もあるのですが、画面によって出力するテキストエリアやインプットボックスなどのForm系のオブジェクトも変わります。つまり変わる部分もやや多いという事です。こういうものには向かなそうというイメージがあります。 もちろん、変わる部分の複数行分をごっそりと変数にいれて埋め込めば実現可能ですが…。 こういう場合にも、Smartyを使うものなのでしょうか? その場合はどのように使いのでしょうか?やはり「変わる部分の複数行分をごっそりと変数にいれて埋め込む」のでしょうか?それとも他にいい方法があるのでしょうか? もしよろしければこの点についても教えてください。 よろしくお願いします。

その他の回答 (1)

noname#244856
noname#244856
回答No.2

実はSmartyでも似たようなことが出来ます。「if関数」 として実装されているものを使います。 Smarty3 マニュアル http://www.smarty.net/docs/ja/ PurePHPで困ることは無いのですが、Smartyの方が "テンプレート側は" シンプルに書けることが多く、また多機能です。 http://www.smarty.net/docs/ja/language.modifier.escape.tpl によれば、デフォルトでh関数を通したようにエスケープされた状態になると記載されています。プログラマの人為的ミスでXSS脆弱性を作ってしまう可能性をほぼ撲滅できますね。テンプレートの可読性も一般的にはSmartyの方がよくなると思います。 逆に "ロジック側は" assignメソッドで変数を1つ1つ割り当てる必要があるので、手間は増えます。また、パフォーマンス面ではややPurePHPより遅くなることは避けられないでしょう。どちらにもメリット・デメリットはありますが、実際の開発現場で多く使われているのはSmartyでしょうね。あくまで個人的にはPurePHPの方が好きですが…w なお、「h関数」という命名に関しては「htmlspecialchars」の頭文字をとったものとして広く利用されているようです。若干「escape」からとった「e関数」などの亜種があったりしますが、私は例外(Exception)を簡単にスローするためのラッパー関数としてこの名前で作成したことがあり、どちらかといえば前者の命名の方が適切ではないかと思いました。

pringlez
質問者

お礼

Smartyはデファクトスタンダードなのかもしれませんね。 上手い使い方を勉強したいと思います。 ありがとうございました

関連するQ&A

専門家に質問してみよう