Definición de código html dentro de variables PHP

4 minutos de lectura

avatar de usuario de adrianTNT
adriantnt

Quiero incluir código html dentro de las variables php. Recuerdo que había una manera de definir código html dentro de una variable php, algo parecido a esto:

<?php $my_var = { ?>
<div>SOME HTML</div>
<?php } ?>

lo encontre en PHP.net pero no puedo encontrarlo ahora. Había algo más en lugar de la "{" pero no recuerdo exactamente. Estoy buscando escribir directamente el código html como arriba, así que NO así: $my_var="<div>SOME HTML</div>";
¿Algunas ideas?

Prueba esto:

<?php ob_start(); ?>
<div>HTML goes here...</div>
<div>More HTML...</div>
<?php $my_var = ob_get_clean(); ?>

De esta forma, conservará el resaltado de sintaxis para HTML.

  • Esto debería estar en la parte superior. Mucho más limpio que EOD

    – KroniK907

    17 de diciembre de 2015 a las 2:11

  • Este método parece funcionar mejor si tiene un código php adicional dentro del html.

    –Steven Carlton

    10 de febrero de 2019 a las 19:31

  • ¡Gran solución!

    -Paul Feakins

    11 de junio de 2021 a las 15:49

  • Algunas referencias o elaboración de las funciones aquí serían útiles.

    – Krow

    15 de mayo a las 4:19

<?php
$my_var = <<<EOD
<div>SOME HTML</div>
EOD;
?>

Se llama heredoc sintaxis.

  • Esperaba que Dreamweaver me ayudara a formatear correctamente la sintaxis html, pero veo que no lo reconoce como html 😐 No puedo cerrar esa etiqueta php antes de html y abrirla nuevamente después del html, ¿puedo?

    – adrianTNT

    5 de septiembre de 2011 a las 9:08

  • No, desafortunadamente, no puede :-/ Puede usar ob_start() y ob_get_clean() para comenzar a guardar el búfer de salida y luego recuperar el búfer en una variable. Sin embargo, eso se considera un truco (feo).

    – Emil Vikström

    5 de septiembre de 2011 a las 9:11

  • No se considera truco feo. Úsalo si te facilita el trabajo y te hace sentir mejor. Nadie notará esa pequeña diferencia de velocidad.

    – Rok Kralj

    5 de septiembre de 2011 a las 9:27

  • Rok, no estoy hablando de rendimiento. Estoy hablando de arquitectura de software. Usar el búfer de salida para obtener datos en variables no es un enfoque limpio y fácil de mantener.

    – Emil Vikström

    5 de septiembre de 2011 a las 9:44

  • ob_start() parece ser una solución muy extrema en cualquier caso, y puedo imaginar todo tipo de errores con cargas de página, scripts, etc.

    – adrianTNT

    9 de septiembre de 2011 a las 7:47

Guarde su HTML en un archivo separado: example.html. Luego lea el contenido del archivo en una variable

$my_var = file_get_contents('example.html');

  • Sí, este método también funcionaría para el propósito inicial que tenía.

    – adrianTNT

    13 de diciembre de 2015 a las 13:22

Si no le importa el resaltado de sintaxis HTML, puede definir una variable normal. Tampoco tiene que escapar de HTML porque PHP le permite usar comillas simples para definir una variable, lo que significa que puede usar comillas dobles dentro de su código HTML.

$html="
 <p>
  <b><i>Some html within a php variable</i><b>
 </p>
 <img src="https://stackoverflow.com/questions/7305869/path/to/some/boat.png" alt="This is an image of a boat">
" ;

Funciona perfectamente para mí, pero supongo que es una cuestión de preferencia e implementación.

Avatar de usuario de RedSparr0w
RedSparr0w

Si va a hacer eco del contenido, otra forma de hacerlo es mediante el uso de funciones,

esto también tiene el beneficio adicional de que los programas usan resaltado de sintaxis.

function htmlContent(){
?>
    <h1>Html Content</h1>
<?php
}


htmlContent();
?>

Avatar de usuario de SR Panda
SR Panda

Para definir código HTML dentro de una variable PHP:

1) Usar una función (Ref: @RedSparr0w)

<?php
function htmlContent(){
?>

    <h1>Html Content</h1>

<?php
}
?>

2. Almacenar dentro de una variable

$var = htmlContent();

Avatar de usuario de upsDuck
upspato

Para agregar a las pocas respuestas que mencionan usar una función en la var. ¿puedo sugerir un función anónima. No soy un asistente de php, así que corríjame si me equivoco, pero me imagino que funciona de la siguiente manera:

<?php
$my_var = function(){
   ?>
   <div>SOME HTML</div>
   <?php
};

// Display content
$my_var();

Para extender esto aún más, si se necesita otro contenido php en el html, se puede pasar de diferentes maneras.

$method1 = "Title"; // Will be the same for every instance 
$method2 = "default content"; // Can change for each instance
$my_var = function($unique=$method2/*set default*/) use ($method1){
   ?>
   <h1><?php echo $prop1; ?></h1>
   <div><?php echo $unique; ?></div>
   <?php
};

// Display content

$my_var();
//returns

Título

contenido predeterminado

$my_var("Some unique content");
//returns

Título

Algunos contenidos únicos

¿Ha sido útil esta solución?