这一直困扰着我的PHP,我从来没有找到答案。希望这个例子能提供足够的信息来理解我的问题,因为我不知道如何用文字彻底解释它。
这是HTML中的一些PHP,在.php文件中。这类事情经常发生:
<html>
<head>
<!-- whatever -->
</head>
<body>
<section id="content">
<ul class="errors">
<?php
foreach ($errors as $error)
{
?>
<li><?= $error ?></li>
<?php
}
?>
我忽略了HTML的结束标记,并使用了<?=
个快捷方式来避免任何不必要的文字。
现在,这是HTML输出中的 expect (即右键单击 - &gt;查看源代码):
<html>
<head>
<!-- whatever -->
</head>
<body>
<section id="content">
<ul class="errors">
<li>Example Error</li>
但是,这是实际结果:
<html>
<head>
<!-- whatever -->
</head>
<body>
<section id="content">
<ul class="errors">
<li>Example Error</li>
为什么呢?因为来自PHP的foreach
循环缩进了3个制表符,所以它生成的<li>
会获得一个附加3个制表符。我一直在使用的解决方案?这里:
<html>
<head>
<!-- whatever -->
</head>
<body>
<section id="content">
<ul class="errors">
<?php
foreach ($errors as $error)
{
?>
<li><?= $error ?></li>
<?php
}
?>
当然,这是有效的 - 但男人是丑陋的!看起来我有两个选择:让我的HTML输出难看,我的代码可读或使我的HTML可读,我的代码很难看。为什么我不能同时拥有?没有别的办法吗?
我想,最好的办法是使代码可读,输出难看。谁检查源代码呢?我知道这可能是最受欢迎的反应。丑陋的HTML源代码让我感到困扰,我希望有一种解决方法,而不会牺牲PHP代码的可读性。
答案 0 :(得分:2)
php代码不会在页面上生成任何缩进。产生缩进的是
中的缩进<li> line</li>
您可以做的是:使用echo输出
<?php
foreach ($errors as $error)
{
echo "<li>$error</li>";
}
?>
或者你可以这样做:
<?php
foreach ($errors as $error)
{?>
<li><?=$error?></li> /(indent it in the begining as much as you want in the markup)
<?}
?>
虽然,imo,你不必担心标记的外观。这并不重要。缩进对输出没有影响
答案 1 :(得分:0)
一种解决方案是使用PHP中的输出缓冲区函数缓冲所有HTML输出,然后对其进行后处理以正确缩进所有内容。
请参阅有关该主题的其他问题: