PHPでHTMLをエコーするにはどうすればよいですか?


122

HTMLを条件付きで出力してページを生成したいので、PHP 4以降でHTMLの複数行スニペットをエコーする最も簡単な方法は何ですか?Smartyのようなテンプレートフレームワークを使用する必要がありますか?

echo '<html>', "\n"; // I'm sure there's a better way!
echo '<head>', "\n";
echo '</head>', "\n";
echo '<body>', "\n";
echo '</body>', "\n";
echo '</html>', "\n";

2
\ n htmlでは機能しません。あなたはエコー "<br>"を意味していたと思います。
Weishi Zeng 2014

(MVCの場合のように)ロジックをビューから分離することをお勧めします。-スクリプトロジックからビューsepareteする小枝のようなtempletigエンジンを使用twig.sensiolabs.org Insted PHPスクリプトにあなたのHTMLマークアップを実装すること、他の方法ラウンドを行います。寺院を小枝にするphp変数を実装します。意味を理解したらすぐに、このアプローチのメリットがわかります。Twigはこの種の問題を解決します。コードの小さなチャンクの場合は、独自のtwig拡張機能を記述できます。これを秒単位で使用して、複雑だが反復的なタスクを実行できます。
DevWL 2017年

回答:


269

PHPでHTMLをエコーする方法はいくつかあります。

1. PHPタグの間

<?php if(condition){ ?>
     <!-- HTML here -->
<?php } ?>

2.エコーで

if(condition){
     echo "HTML here";
}

エコーでは、HTMLで二重引用符を使用する場合は、次のように単一引用符エコーを使用する必要があります。

echo '<input type="text">';

または、次のようにしてエスケープすることもできます。

echo "<input type=\"text\">";

3.ヒアドキュメント

4. Nowdocs(PHP 5.3.0以降)

テンプレートエンジンは、主にHTMLを含むドキュメントでPHPを使用するために使用されます。実際、PHPの本来の目的は、テンプレート言語でした。そのため、PHPでは短いタグなどを使用して変数をエコーできます(たとえば、<?=$someVariable?>

構文をさらに簡潔にする他のテンプレートエンジン(Smarty、Twigなど)があります(例:){{someVariable}}

テンプレートエンジンを使用する主な利点は、デザイン(プレゼンテーションロジック)をコーディング(ビジネスロジック)から分離することです。また、コードがよりクリーンになり、長期的に維持しやすくなります。

他にご不明な点がありましたら、お気軽にコメントを残してください。

これらの詳細については、PHPのドキュメントを参照してください


注: PHPのショートタグ<?とは?>して有効にした場合、彼らはのみ使用可能ですので、落胆しているshort_open_tagのphp.ini設定ファイルのディレクティブ、またはPHPを用いて構成されている場合--enable-short-tagsのオプション。5.4以降の設定に関係なく使用できます


7
「/ * HTML here * /」は本当に「<!-HTML here->」であってはなりませんか?;)
ジェレミー・ローガン

はい、最初の投稿であなたは正しいです。私はコードハハに巻き込まれました。ありがとうございました。
クリス・ビア

1
ありがとう、@ Chris B.助けてくれた。エコーの場合、HTMLで二重引用符を使用したい場合は、次のように単一引用符エコーを使用する必要があります。
Ayush Mishra

1
回答の最初のリンクが削除されました:(
mcon

実際、5.4以降で使用できる短いタグは、短いエコータグのみ<?=$var?>です。短いタグは通常どおり使用しないでください<? doStuff() ?>。削除する必要があります()。
igorsantos07 2015年

65

次のように試してください(ヒアドキュメント構文):

$variable = <<<XYZ
<html>
<body>

</body>
</html>
XYZ;
echo $variable;

8
@MhdSyrwanはランダムな文字だけです。php.net
manual /

1
詳しく説明しますか?開始または終了のPHPブラケットは表示されませんが、HTMLとPHPの両方が表示されます。-リンクは機能し、より適切に回答しますが、おそらくコメントではなく回答テキストにあるはずですか?
Julix

@Julixもちろん、PHPの開始タグと(依存する)終了タグを追加する必要があります。彼は例を短くしたかっただけです。
Fahmi、2018年

わかった; どういうわけか、これはヒアドキュメント構文でした(つまり、コード全体はphpです)。私は当時PHPに慣れておらず、次のような構文を使用していたため、混乱しました <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>。少しばかり古いコメントが返って来るのはいつも面白いです。
Julix 2018年

30

代替構文代替構文を制御構造に使用して、PHPから抜け出すことができます。

<?php if ($something): ?>
    <some /> <tags /> <etc />
    <?=$shortButControversialWayOfPrintingAVariable ?>
    <?php /* A comment not visible in the HTML, but it is a bit of a pain to write */ ?>
<?php else: ?>
    <!-- else -->
<?php endif; ?>

@ジェレミー:これはおそらくあなたがもっと何かを探していないと仮定すると、おそらく最も直接的な方法です...あなたはもっと何かを探していますか?
フランクV

1
はい、具体的には、HTMLの間にPHPコメントを使用する機能、エコーされないコメント。
TheFlash 2009

15

基本的に、HTMLをPHPタグの外側のどこにでも置くことができます。ロジックとプレゼンテーションを分離するために、データを表示する前に必要なすべてのデータ処理を行うことも非常に有益です。

データ表示自体は同じPHPファイルの下部に配置することも、ほとんどがHTMLで構成される個別のPHPファイルを含めることもできます。

私はこのコンパクトなスタイルを好みます:

<?php
    /* do your processing here */
?>

<html>
<head>
    <title><?=$title?></title>
</head>
<body>
    <?php foreach ( $something as $item ) : ?>
        <p><?=$item?></p>
    <?php endforeach; ?>
</body>
</html>

注:PHPの設定によっては、<?php echo $var; ?>代わりにを使用する必要がある場合があり<?=$var?>ます。


7

私はこのスタイルに不満です:

  <html>
    <head>
<%    if (X)
      {
%>      <title>Definitely X</title>
<%    }
      else
      {
%>      <title>Totally not X</title>
<%    }
%>  </head>
  </html>

はい、ASPスタイルのタグを使用します。PHPとHTMLの融合は、私の目にはとても読みやすく見えます。秘訣は<%%>マーカーを適切に取得することです。


ASPタグはPHP 4+と互換性がありますか?
TheFlash 2009

4
はい。ただし、最後にそれらを取得します-それらはPHPから削除されます(まだバージョンがわからない場合は...不明)
Greg

7

別のアプローチは、HTMLを別のファイルに入れ、この場合、変更する領域をプレースホルダー[[content]]でマークすることです。(str_replaceの代わりにsprintfを使用することもできます。)

$page = 'Hello, World!';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]', $content, $page);
echo($pagecontent);

または、バッファにキャプチャされた画面にすべてのPHP情報を出力し、HTMLを記述して、PHP出力をページに戻すこともできます。

PHPを書き、それをキャッチしてからもう一度書くのは奇妙に思えるかもしれませんが、それは、あらゆる種類のフォーマット(ヒアドキュメントなど)を実行でき、ページの手間をかけずに正しく出力をテストできることを意味しますテンプレートが邪魔になります。(ちなみに、Joomla CMSはこのようにしています。)

すなわち:

<?php
    ob_start();
    echo('Hello, World!');
    $php_output = ob_get_contents();
    ob_end_clean();
?>
<h1>My Template page says</h1>
<?php
    echo($php_output);
?>
<hr>
Template footer

2

次のように、単にprint関数を使用してPHPファイルのテキストをエコーし​​ます。

<?php

  print('
    <div class="wrap">

      <span class="textClass">TESTING</span>

    </div>
  ')
?>


1

Chris Bの回答に加えて、echoとにかく使用する必要がある場合でも、それを単純で構造化したままにしておき、コードをスパムしたくない<?php stuff; ?> sを場合は、以下の構文を使用できます。

たとえば、ギャラリーの画像を表示するとします。

foreach($images as $image)
{
    echo
    '<li>',
        '<a href="', site_url(), 'images/', $image['name'], '">',
            '<img ',
                'class="image" ',
                'title="', $image['title'], '" ',
                'src="', site_url(), 'images/thumbs/', $image['filename'], '" ',
                'alt="', $image['description'], '"',
            '>',
        '</a>',
    '</li>';
}

Echoは複数のパラメーターを取るため、インデントを適切にするとかなり見栄えが良くなります。またecho、パラメーターを使用する方が連結よりも効果的です。



1

これを試して:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>

0

HTMLをエコーし​​ないでください。

使いたい場合

<?php echo "<h1>  $title; </h1>"; ?>

あなたはこれをするべきです:

<h1><?= $title;?></h1>

-1

これが私のやり方です:

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.