Is there any way to return HTML in a PHP function? (without building the return value as a string)

I have a PHP function that I’m using to output a standard block of HTML. It currently looks like this:

<?php function TestBlockHTML ($replStr) { ?>
    <body><h1> <?php echo ($replStr) ?> </h1>
<?php } ?>

I want to return (rather than echo) the HTML inside the function. Is there any way to do this without building up the HTML (above) in a string?

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

You can use a heredoc, which supports variable interpolation, making it look fairly neat:

function TestBlockHTML ($replStr) {
return <<<HTML

Pay close attention to the warning in the manual though – the closing line must not contain any whitespace, so can’t be indented.

Solution 2

Yes, there is: you can capture the echoed text using ob_start:

<?php function TestBlockHTML($replStr) {
    ob_start(); ?>
    <body><h1><?php echo($replStr) ?></h1>
    return ob_get_clean();
} ?>

Solution 3

This may be a sketchy solution, and I’d appreciate anybody pointing out whether this is a bad idea, since it’s not a standard use of functions. I’ve had some success getting HTML out of a PHP function without building the return value as a string with the following:

function noStrings() {
    echo ''?>
        <div>[Whatever HTML you want]</div>

The just ‘call’ the function:


And it will output:

<div>[Whatever HTML you want]</div>

Using this method, you can also define PHP variables within the function and echo them out inside the HTML.

Solution 4

Create a template file and use a template engine to read/update the file. It will increase your code’s maintainability in the future as well as separate display from logic.

An example using Smarty:

Template File

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">


function TestBlockHTML(){
  $smarty = new Smarty();
  $smarty->assign('title', 'My Title');
  $smarty->assign('string', $replStr);
  return $smarty->render('template.tpl');

Solution 5

Another way to do is is to use file_get_contents() and have a template HTML page


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">

PHP Function

function YOURFUNCTIONNAME($url){

$html_string = file_get_contents($url);
return $html_string;


Solution 6

If you don’t want to have to rely on a third party tool you can use this technique:

function TestBlockHTML($replStr){
  $template = 
 return strtr($template, array( '$str' => $replStr));

Solution 7

Or you can just use this:

function TestHtml() { 
<!-- HTML HERE -->

<? } ?>

to get content from this function , use this :

<?= file_get_contents(TestHtml()); ?>

That’s it 🙂

Solution 8

Template File



if (($text = file_get_contents("file.html")) === false) {
    $text = "";

$text = str_replace("{title}", "Title Here", $text);
$text = str_replace("{username}", "Username Here", $text);

then you can echo $text as string

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply