Wie kann ich HTML in PHP wiedergeben?

122

Ich möchte HTML bedingt ausgeben, um eine Seite zu generieren. Was ist also der einfachste Weg, um mehrzeilige HTML-Schnipsel in PHP 4+ wiederzugeben? Muss ich ein Vorlagenframework wie Smarty verwenden?

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";
Der Blitz
quelle
2
\ n funktioniert nicht in HTML. Ich denke du meintest Echo "<br>";
Weishi Zeng
Gute Praxis sagen, um Ihre Logik von der Ansicht zu trennen (wie in MVC). Verwenden Sie eine Templetig-Engine wie Twig, um Ihre Ansicht von der Skriptlogik zu trennen - twig.sensiolabs.org Wenn Sie Ihr HTML-Markup in Ihr PHP-Skript implementiert haben, machen Sie es anders herum . Implementieren Sie PHP-Variablen für den Zweig-Tempel. Sobald Sie verstehen, was ich meine, werden Sie die Vorteile dieses Ansatzes sehen. Zweig lösen diese Art von Problemen. Für eine kleine Menge Code können Sie Ihre eigene Zweigerweiterung schreiben, mit der Sie dann in Sekundenschnelle einige komplizierte, aber sich wiederholende Aufgaben ausführen können.
DevWL

Antworten:

269

Es gibt verschiedene Möglichkeiten, HTML in PHP wiederzugeben.

1. Zwischen PHP-Tags

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

2. In einem Echo

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

Wenn Sie bei Echos doppelte Anführungszeichen in Ihrem HTML-Code verwenden möchten, müssen Sie Echos in einfachen Anführungszeichen wie folgt verwenden:

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

Oder du kannst ihnen so entkommen:

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

3. Heredocs

4. Nowdocs (ab PHP 5.3.0)

Template-Engines werden für die Verwendung von PHP in Dokumenten verwendet, die hauptsächlich HTML enthalten. Tatsächlich bestand der ursprüngliche Zweck von PHP darin, eine Vorlagensprache zu sein. Aus diesem Grund können Sie mit PHP kurze Tags verwenden, um Variablen (z <?=$someVariable?>. B. ) wiederzugeben .

Es gibt andere Template-Engines (wie Smarty, Twig usw.), die die Syntax noch präziser machen (z {{someVariable}}. B. ).

Der Hauptvorteil der Verwendung einer Template-Engine besteht darin, das Design ( Präsentationslogik ) von der Codierung ( Geschäftslogik ) zu trennen . Es macht den Code auch sauberer und auf lange Sicht einfacher zu warten.

Wenn Sie weitere Fragen haben, können Sie gerne einen Kommentar hinterlassen.

Weitere Informationen zu diesen Themen finden Sie in der PHP-Dokumentation .


HINWEIS: PHP-Kurztags <?und ?>werden nicht empfohlen, da sie nur verfügbar sind, wenn sie mit der short_open_tagKonfigurationsdatei-Anweisung php.ini aktiviert wurden oder wenn PHP mit der --enable-short-tagsOption konfiguriert wurde . Sie sind unabhängig von den Einstellungen ab 5.4 verfügbar .

Chris Bier
quelle
7
Sollte das "/ * HTML hier * /" nicht WIRKLICH ein "<! - HTML hier ->" sein? ;)
Jeremy Logan
Ja, beim ersten Beitrag bist du richtig. Ich war im Code gefangen, haha. Danke dir.
Chris Bier
1
Danke, @Chris B. es hat mir geholfen. Wenn Sie bei Echos doppelte Anführungszeichen in Ihrem HTML-Code verwenden möchten, müssen Sie Echos in einfachen Anführungszeichen verwenden: Ich habe dies tatsächlich vermisst.
Ayush Mishra
1
Dieser erste Link in der Antwort ist jetzt entfernt :(
mcon
Tatsächlich sind die einzigen kurzen Tags, die ab 5.4 verfügbar sind, die kurzen Echo-Tags <?=$var?>. Von kurzen Tags wird wie gewohnt abgeraten und sie müssen entfernt werden ( <? doStuff() ?>).
igorsantos07
65

Versuchen Sie es so ( Heredoc- Syntax):

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

</body>
</html>
XYZ;
echo $variable;
lfx
quelle
8
@MhdSyrwan nur zufällige Zeichen, können Sie hier mehr lesen php.net/manual/en/…
lfx
1
Möchtest du das näher erläutern? Ich sehe nicht die öffnenden oder schließenden PHP-Klammern, sondern sowohl HTML als auch PHP. - Der Link funktioniert und beantwortet ihn besser, aber vielleicht sollte er dann im Antworttext stehen, nicht in den Kommentaren?
Julix
@ Julix Natürlich müssen Sie öffnende und ( abhängig ) schließende PHP-Tags hinzufügen . Er wollte das Beispiel nur kurz machen.
Fahmi
Ich habe es verstanden; Irgendwie habe ich vermisst, dass dies die Heredocs-Syntax war (dh der gesamte Code ist PHP). Ich war verwirrt, da ich zu dieser Zeit neu in PHP war und es gewohnt war, Syntax wie <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>--- zu sehen. Also dachte ich, ein paar Klammern fehlten und war mir nicht sicher, wohin sie genau gehen würden. Es ist immer lustig, wenn meine etwas älteren Kommentare beantwortet werden, da ich damals so neu in all dem war.
Julix
30

Sie können die alternative Syntax verwenden. Alternative Syntax für Kontrollstrukturen und Ausbruch aus 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; ?>
Tom Haigh
quelle
@Jeremy: Dies ist wahrscheinlich der beste und direkteste Weg, vorausgesetzt, Sie suchen nicht nach etwas mehr ... Suchen Sie nach etwas mehr?
Frank V
1
Ja, insbesondere die Möglichkeit, PHP-Kommentare zwischen dem HTML-Code zu verwenden, Kommentare, die nicht wiedergegeben werden.
TheFlash
15

Grundsätzlich können Sie HTML überall außerhalb von PHP-Tags platzieren. Es ist auch sehr vorteilhaft, alle erforderlichen Daten zu verarbeiten, bevor Daten angezeigt werden, um Logik und Präsentation zu trennen.

Die Datenanzeige selbst kann sich am Ende derselben PHP-Datei befinden, oder Sie können eine separate PHP-Datei einfügen, die hauptsächlich aus HTML besteht.

Ich bevorzuge diesen kompakten Stil:

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

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

Hinweis: Möglicherweise müssen Sie <?php echo $var; ?>anstelle von <?=$var?>abhängig von Ihrem PHP-Setup verwenden.

DisgruntledGoat
quelle
7

Ich bin Teil dieses Stils:

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

Ich verwende Tags im ASP-Stil, ja. Die Mischung von PHP und HTML sieht für mich sehr gut lesbar aus. Der Trick besteht darin, die <%und %>-Markierungen genau richtig zu machen.

John Kugelman
quelle
Sind ASP-Tags mit PHP 4+ kompatibel?
TheFlash
4
Ja, aber hol sie dir, solange sie dauern - sie werden aus PHP entfernt (nicht sicher, welche Version ... wenn sie noch nicht gegangen sind)
Greg
7

Ein anderer Ansatz besteht darin, den HTML-Code in eine separate Datei zu stellen und den zu ändernden Bereich in diesem Fall mit einem Platzhalter [[Inhalt]] zu markieren. (Sie können auch sprintf anstelle von str_replace verwenden.)

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

Alternativ können Sie einfach alle PHP-Inhalte auf dem in einem Puffer erfassten Bildschirm ausgeben, den HTML-Code schreiben und die PHP-Ausgabe wieder auf die Seite setzen.

Es mag seltsam erscheinen, das PHP zu schreiben, es abzufangen und dann erneut zu schreiben, aber es bedeutet, dass Sie alle Arten von Formatierungsaufgaben ( Heredoc usw.) ausführen und die Ausgabe ohne den Aufwand der Seite korrekt testen können Vorlage im Weg. (Das Joomla CMS macht das übrigens so.)

Dh:

<?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
julz
quelle
2

Verwenden Sie einfach die Druckfunktion , um Text in der PHP-Datei wie folgt wiederzugeben:

<?php

  print('
    <div class="wrap">

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

    </div>
  ')
?>
Code Spy
quelle
2
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

echo('Echo as HTML' . htmlspecialchars((string)$enter_string));
ezequiel wernicke
quelle
1

Zusätzlich zur Antwort von Chris B können Sie die folgende Syntax verwenden , wenn Sie sie echotrotzdem verwenden möchten, sie dennoch einfach und strukturiert halten und den Code nicht mit <?php stuff; ?>'s spammen möchten .

Zum Beispiel möchten Sie die Bilder einer Galerie anzeigen:

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 verwendet mehrere Parameter, sodass es bei guter Einrückung ziemlich gut aussieht. Auch die Verwendung echomit Parametern ist effektiver als die Verkettung.

totymedli
quelle
1
echo '
<html>
<body>
</body>
</html>
';

oder

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

Versuche dies:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>
edCoder
quelle
0

HTML nicht wiedergeben.

Wenn Sie verwenden möchten

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

Sie sollten dies tun:

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

So mache ich es:

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>
Cristi Bejan
quelle