如何防止在线端渲染的空格?

时间:2016-03-24 22:05:39

标签: php html css

上下文

我有以下代码:

<ul>
    <?php foreach($users as $user){ ?>
    <li>
        <?php echo $user->name ?>
    </li>
    <?php } ?>
</ul>

它呈现:

<ul>
    </ul>

当有$users时,一切正常。但是,如果没有,<ul>将在其中显示空格,使其不能归因于CSS选择器:empty

我设法解决了这个问题:

<ul><?php foreach($users as $user){ ?>
    <li>
        <?php echo $user->name ?>
    </li>
    <?php } ?></ul>

它呈现:

<ul></ul>

如果代码中没有类似的中断,列表现在是空的(即使是空的空格),但我不敢这样离开,其他程序员修复缩进并打破它。

我的问题

有没有办法在代码中添加换行符而不向渲染的html元素添加空格或中断?

5 个答案:

答案 0 :(得分:2)

  

我的问题是:有没有办法在代码中添加换行符而不向渲染的html元素添加空格或中断?

您可以使用HTML评论

<ul><!--
    <?php foreach($users as $user){ ?>
    --><li><!-- …

如果您希望保持HTML代码的可读性,这种技术也会用于fight the space between inline block elements

或者您当然可以使用输出缓冲,然后在将输出返回给客户端之前替换这些空格(如果您想正确执行,则相当复杂。)

可能是解决实际问题的最简单方法:

如果没有任何列表项,为什么要输出ul元素呢?

使用if围绕整个块,检查数组包含多少元素 - 如果没有,则不输出任何内容。

答案 1 :(得分:1)

之前做一个测试:

  <?php if (isset($users) && count($users) > 0){ ?>
    <ul>
      <?php foreach($users as $user){ ?>
        <li>
          <?php echo $user->name ?>
        </li>
      <?php } ?>
    </ul>
  <?php } ?>

这样,如果没有用户,则不会创建<ul>,因此没有空格。

答案 2 :(得分:0)

不要删除你的php语句:

<ul>
<?php foreach($users as $user){ ?>
    <li>
        <?php echo $user->name ?>
    </li>
<?php } ?>
</ul>

PHP将删除从<?php开始到?>结束的所有内容,包括换行符。这是在打开php标记之前留下的标签。

答案 3 :(得分:0)

您可以使用以下方式进入新行:

echo "\n" //this will break into a new line

但要注意你必须使用双引号。单引号不起作用:

echo '\n' //this will output \n

完整的解决方案将是

<ul>
    <?php foreach($users as $user){ ?>
    <li>
        <?php echo $user->name ?>
    </li>
    <?php } echo "\n" ?></ul>

我测试了它的确有效。但是如果你担心未来的发展并且不清楚,我会使用

if(isset($users)){?>
<ul>
    <?php foreach($users as $user){ ?>
    <li>
        <?php echo $user->name ?>
    </li>
    <?php } ?>
</ul>
<?php }else{ //comment explaining that this prevents CSS selector ?>
<ul></ul> 
<?php } ?>

答案 4 :(得分:0)

我会用这种表示法:

<ul><?php
    foreach($users as $user){
        ?><li><?php echo $user->name ?></li><?php
    }
?></ul>

它仍然非常易读,HTML输出中不包含任何不需要的空格,$users是否为空!