Come posso echo HTML in PHP?


122

Voglio produrre in modo condizionale HTML per generare una pagina, quindi qual è il modo più semplice per riprodurre frammenti di HTML su più righe in PHP 4+? Avrei bisogno di usare un template framework come 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 non funziona in html. Immagino volessi dire echo "<br>";
Weishi Zeng

Una buona pratica dice di separare la tua logica dalla vista (come in MVC). usa il motore templetig come Twig per separare la tua vista dalla logica dello script - twig.sensiolabs.org Se vuoi implementare il tuo markup html nel tuo script php, fallo in un altro modo. Implementa le variabili php in twig temple. Non appena avrai capito ciò che intendo, vedrai i benefici di questo approccio. Twig risolve questo tipo di problemi. Per una piccola possibilità di codice puoi scrivere la tua estensione ramoscello che puoi usare in pochi secondi per eseguire alcune attività complicate ma ripetitive.
DevWL

Risposte:


269

Esistono alcuni modi per eseguire l'eco dell'HTML in PHP.

1. Tra i tag PHP

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

2. In un'eco

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

Con echos, se desideri usare le virgolette doppie nel tuo HTML devi usare le virgolette singole in questo modo:

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

Oppure puoi sfuggirgli in questo modo:

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

3. Heredocs

4. Nowdocs (a partire da PHP 5.3.0)

I motori di modelli vengono utilizzati per utilizzare PHP in documenti che contengono principalmente HTML. In effetti, lo scopo originale di PHP era quello di essere un linguaggio per modelli. Ecco perché con PHP puoi usare cose come tag brevi per echo variabili (es<?=$someVariable?> ).

Esistono altri motori di template (come Smarty, Twig, ecc.) Che rendono la sintassi ancora più concisa (es. {{someVariable}} .).

Il vantaggio principale dell'utilizzo di un motore di modelli è mantenere il design ( logica di presentazione ) separato dalla codifica ( logica aziendale ). Inoltre rende il codice più pulito e più facile da mantenere a lungo termine.

Se hai altre domande, non esitare a lasciare un commento.

Ulteriori letture sono disponibili su queste cose nella documentazione PHP .


NOTA: i tag brevi <?e PHP ?>sono sconsigliati perché sono disponibili solo se abilitati con la short_open_tagdirettiva del file di configurazione php.ini o se PHP è stato configurato con l' --enable-short-tagsopzione. Sono disponibili, indipendentemente dalle impostazioni dalla 5.4 in poi .


7
"/ * HTML qui * /" non dovrebbe DAVVERO essere un "<! - HTML qui ->"? ;)
Jeremy Logan

Sì sul primo post hai ragione. Sono stato coinvolto nel codice haha. Grazie.
Chris Bier

1
Grazie, @Chris B. mi ha aiutato. Con echos, se desideri usare le virgolette doppie nel tuo HTML devi usare gli echi delle virgolette singole in questo modo: mi mancava davvero questo.
Ayush Mishra

1
Questo primo collegamento nella risposta è ora rimosso :(
mcon

In realtà, gli unici tag brevi disponibili dalla 5.4 in poi sono i tag echo brevi <?=$var?>. I tag brevi sono sconsigliati come al solito e devono essere rimossi ( <? doStuff() ?>).
igorsantos07

65

Provalo in questo modo ( sintassi heredoc ):

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

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

8
@MhdSyrwan caratteri solo casuali, si può leggere di più qui php.net/manual/en/...
lfx

1
cura di elaborare? Non vedo le parentesi PHP di apertura o chiusura, ma sia HTML che PHP, quindi eh? - il link funziona e risponde meglio, ma forse dovrebbe essere nel testo della risposta, non nei commenti?
Julix

@ Julix ovviamente è necessario aggiungere tag PHP di apertura e ( dipende ) di chiusura. Voleva solo abbreviare l'esempio.
Fahmi

Capito; in qualche modo mi mancava questa sintassi heredocs (cioè l'intero codice è php). Mi sono confuso, dato che all'epoca ero nuovo di PHP e avevo l'abitudine di vedere sintassi come <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>--- Quindi ho pensato che mancassero un mucchio di parentesi e non ero sicuro di dove sarebbero andati esattamente. È sempre divertente quando i miei commenti un po 'più vecchi ricevono una risposta, dato che ero così nuovo a tutto allora.
Julix

30

È possibile utilizzare la sintassi alternativa sintassi alternativa per le strutture di controllo e uscire da 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; ?>

@ Jeremy: Questo è probabilmente il modo migliore e più diretto supponendo che tu non stia cercando qualcosa di più ... Stai cercando qualcosa di più?
Frank V

1
Sì, in particolare la possibilità di utilizzare commenti PHP tra l'HTML, commenti che non verranno echeggiati.
TheFlash

15

Fondamentalmente puoi mettere HTML ovunque al di fuori dei tag PHP. È anche molto vantaggioso eseguire tutta l'elaborazione dei dati necessaria prima di visualizzare qualsiasi dato, in modo da separare logica e presentazione.

La visualizzazione dei dati stessa potrebbe trovarsi nella parte inferiore dello stesso file PHP oppure potresti includere un file PHP separato composto principalmente da HTML.

Preferisco questo stile compatto:

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

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

Nota: potrebbe essere necessario utilizzare <?php echo $var; ?>anziché a <?=$var?>seconda della configurazione di PHP.


7

Sono parziale a questo stile:

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

Io uso tag in stile ASP, sì. La fusione di PHP e HTML sembra super leggibile ai miei occhi. Il trucco sta nell'ottenere correttamente i marcatori <%e %>.


I tag ASP sono compatibili con PHP 4+?
TheFlash

4
Sì, ma prendili finché durano: verranno rimossi da PHP (non sono sicuro di quale versione ... se non l'hanno già fatto)
Greg

7

Un altro approccio consiste nel mettere l'HTML in un file separato e contrassegnare l'area da modificare con un segnaposto [[contenuto]] in questo caso. (Puoi anche usare sprintf invece di str_replace.)

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

In alternativa, puoi semplicemente visualizzare tutto il materiale PHP sullo schermo catturato in un buffer, scrivere l'HTML e rimettere l'output PHP nella pagina.

Potrebbe sembrare strano scrivere il PHP, prenderlo e poi riscriverlo, ma significa che puoi fare tutti i tipi di cose di formattazione ( heredoc , ecc.) E testarlo correttamente senza il fastidio della pagina modello di intralcio. (Il CMS di Joomla lo fa in questo modo, BTW.)

Vale a dire:

<?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

Usa semplicemente la funzione di stampa per riprodurre il testo nel file PHP come segue:

<?php

  print('
    <div class="wrap">

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

    </div>
  ')
?>

2
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

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

1

Oltre alla risposta di Chris B , se devi usarla echocomunque, vuoi comunque mantenerla semplice e strutturata e non vuoi spammare il codice con<?php stuff; ?> le s, puoi usare la sintassi seguente.

Ad esempio vuoi visualizzare le immagini di una galleria:

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 accetta più parametri, quindi con un buon rientro sembra piuttosto buono. Anche l'utilizzo echocon parametri è più efficace della concatenazione.


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

o

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

1

Prova questo:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>

0

Non echeggiare HTML.

Se vuoi usare

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

dovresti fare questo:

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

-1

Ecco come lo faccio:

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.