我在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内容吗?我该如何解决这个问题?
有人可以帮助我解释为什么这不起作用吗?
答案 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,但我不推荐它,因为它允许执行任意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;