web-dev-qa-db-ja.com

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

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";
113
Robinicks

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

1. PHPタグの間

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

エコーで

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 Documentation に詳しい説明があります。

神のご加護を!


注:PHP短いタグ<?および?>は、short_open_tag php.ini設定ファイルディレクティブで有効になっている場合にのみ使用可能であるため、お勧めできません。またはPHPが--enable-short-tagsオプションで設定されている場合 5.4以降の設定に関係なく利用可能です

255
Chris Bier

このようにしてみてください。

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

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

あなたは 制御構造のための代替構文代替構文 を使用し、phpから抜け出すことができます:

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

基本的には、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?>を使用する必要があるかもしれません。

15
DisgruntledGoat

私はこのスタイルの一部です:

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

はい、私はASPスタイルのタグを使います。 PHPとHTMLのブレンドは私の目には非常に読みやすいように見えます。トリックは<%%>マーカーを正しくすることです。

7
John Kugelman

もう1つの方法は、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を書き出してキャッチしてからもう一度書き込むのは奇妙に思えるかもしれませんが、すべての種類のフォーマット設定(Heredocsなど)を実行でき、ページテンプレートの手間をかけずに正しく出力をテストできるということです道。 (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
7
julz
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

echo( 'Echo as HTML' . htmlspecialchars( (string)$enter_string ) );
2

これを試してみてください.......

<?php
echo <<<HTML

your html tags here

HTML;
?>
2
edCoder

Chris B's answerに加えて、とにかくechoを使う必要があり、それでもシンプルで構造化されたままで<?php stuff; ?>でコードをスパムしたくない場合は、以下の構文を使用できます。

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

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
totymedli

hTMLをエコーアウトしない

使いたい場合

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

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

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

次のようにPHPファイル内のテキストをエコーするには、print関数を使用するだけです。

<?php

  print('

    <div class="wrap">

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

    </div>


  ')

?>
1
Code Spy
echo '
<html>
<body>
</body>
</html>
';

または

echo "<html>\n<body>\n</body>\n</html>\n";
1
Alessandro