修复嵌套PHP中的HTML间距问题

时间:2012-02-05 05:08:15

标签: php html

这一直困扰着我的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代码的可读性。

2 个答案:

答案 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输出,然后对其进行后处理以正确缩进所有内容。

请参阅有关该主题的其他问题:

How to properly indent PHP/HTML mixed code?