[英]PHP: How can I put HTML Code with PHP Code within into a PHP Variable?
我在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內容? 我該如何解決?
有人可以幫我解釋一下為什么這行不通嗎?
<?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作為模板引擎運行,則可以使用輸出控制功能 ,例如:
<?php ob_start(); ?>
<li data-time="<?= time() ?>"> ...</li>
<?php
$html = ob_get_contents();
ob_end_clean();
echo $html;
輸出量
<li data-time="1483433793"> ...</li>
但是,如果應該按原樣分配字符串,請使用here文檔語法 :
$html = <<<'HTML'
<li data-time="{$variable_will_NOT_be_parsed}">...</li>
HTML;
要么
$html = <<<HTML
<li data-time="{$variable_WILL_be_parsed}">...</li>
HTML;
您想將一些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 . "...
的縮寫$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...
這樣,您就不必轉義每個雙引號
我認為你必須像這樣工作
$test = "PHP Text";
$list = "<strong>here ist Html</strong>" . $test . "<br />";
echo $list;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.