PHP:如何将带有PHP代码的HTML代码放入PHP变量中?

时间:2017-01-03 08:48:13

标签: php html variables

我在PHP中有关于"'的问题。我必须将完整的<li>元素放入PHP变量中,但这不起作用,输出完全错误...

    $list = 
"
    <li class=\"<?php if($info[1] < 700) {echo \"half\";} else {echo \"full\";} ?>\">

        <div class=\"onet-display\">

        <?php if ($image = $post->get('image.src')): ?>
            <a class=\"onet-display-block\" href=\"<?= $view->url('@blog/id', ['id' => $post->id]) ?>\"><img class=\"onet-thumb\" src=\"<?= $image ?>\" alt=\"<?= $post->get('image.alt') ?>\"></a>
        <?php endif ?>

        <h1 class=\"onet-thumb-title\"><a href=\"<?= $view->url('@blog/id', ['id' => $post->id]) ?>\"><?= $post->title ?></a></h1>
        <div class=\"uk-margin\"><?= $post->excerpt ?: $post->content ?></div>

        </div>

    </li>
";

是因为HTML代码中有PHP内容吗?我该如何解决这个问题?

有人可以帮助我解释为什么这不起作用吗?

3 个答案:

答案 0 :(得分:1)

<?php ... <?php

由于您的字符串包含PHP标记,我认为您希望对它们进行评估。另一个PHP标记中的开放PHP标记被解释为PHP代码的一部分。例如,以下输出<?php echo time();

<?php echo "<?php echo time();";

有几种方法可以从PHP表达式构建PHP字符串。

级联

您可以创建返回字符串的函数,并使用其他字符串连接对它们的调用:

function some_function() {
  return time();
}

$html = "<li " . some_function() . ">";

或使用sprintf

$html = sprintf('<li %s>', some_function());

EVAL

另一种方法是使用eval,但我不推荐它,因为它允许执行任意PHP代码并可能导致意外行为。

输出缓冲

如果您将PHP作为模板引擎运行,则可以使用output control functions,例如:

<?php ob_start(); ?>

<li data-time="<?= time() ?>"> ...</li>

<?php
$html = ob_get_contents();
ob_end_clean();
echo $html;

输出

<li data-time="1483433793"> ...</li>

此处为文档语法

但是,如果字符串应按原样分配,请使用here document syntax

$html = <<<'HTML'
<li data-time="{$variable_will_NOT_be_parsed}">...</li>
HTML;

$html = <<<HTML
<li data-time="{$variable_WILL_be_parsed}">...</li>
HTML;

答案 1 :(得分:0)

您想将一些html存储到变量中。

你的来源应该(如果还没有)以

开头
<?php

然后开始构建$list

的内容

从您的代码开始,最近的修补方法是通过附加字符串来构建$list

<?php
$list = "<li class=";

if($info[1] < 700)
{
    $list .= "\"half\"";  // RESULT: <li class="half"
}
else
{
    $list .= "\"full\"";  // RESULT: <li class="full"
}

// ...and so on...

现在要注意几点:

$list .= "...$list = $list . "...

的缩写形式

.点运算符加入两个字符串。

第二件事你可以通过混合单引号和双引号使代码更容易阅读

在PHP中使用双引号,在生成的HTML中使用单引号:

<?php
$list = "<li class=";

if($info[1] < 700)
{
    $list .= "'half'";  // RESULT: <li class='half'
}
else
{
    $list .= "'full'";    // RESULT: <li class='full'
}

// ...and so on...

这样你就不需要逃避每一个双引号

答案 2 :(得分:0)

我认为你必须像这样工作

$test = "PHP Text";

$list = "<strong>here ist Html</strong>" . $test . "<br />";  
echo $list;