2017-05-27 112 views
0

我试图运行此代码以多行打印输出,但它不按预期工作。Heredoc无法正常工作。 (PHP)

<?php 
    $author = "Bill Gates"; 

    $text = <<<_END 
      Success is a lousy teacher. 
      It seduces smart people into thinking they can't lose. 

      -$author 
_END; 

    echo $text; 
?> 

压痕是完全没有问题,但仍然输出为一行

下面是输出

Output Image

我觉得有我在代码中的错误,所以我从PHP官方网站

<?php 
$str = <<<EOD 
Example of string 
spanning multiple lines 
using heredoc syntax. 
EOD; 

/* More complex example, with variables. */ 
class foo 
{ 
    var $foo; 
    var $bar; 

    function foo() 
    { 
     $this->foo = 'Foo'; 
     $this->bar = array('Bar1', 'Bar2', 'Bar3'); 
    } 
} 

$foo = new foo(); 
$name = 'MyName'; 

echo <<<EOT 
My name is "$name". I am printing some $foo->foo. 
Now, I am printing some {$foo->bar[1]}. 
This should print a capital 'A': \x41 
EOT; 
?> 

即使这段代码复制下面的代码在一行中输出。 Output 2

那么,为什么会发生这种情况呢?什么是错误? 在此先感谢!

+0

为什么不只是使用一些HTML ?.这不是那么困难,而且看起来会更好。你甚至可以自定义字体和颜色。 – Farini

回答

2

Heredoc语法与告诉浏览器使用哪个字符作为换行符来生成多行输出无关。

的Web浏览器使用<br>,而不是'\n'此字符串有,以显示新的行

你期待什么可以与任何输出之前发送<pre>标签浏览器来完成。

缩进非常好,但输出仍然在一行中。

无论HTML字符串是如何创建的,此代码中都没有HTML换行符。如果您希望显示输出格式,请在输出前发送<pre>标签,然后我们不需要这些HTML换行符。

<pre> 
<?php 
echo "La la la 
la la la la 
la la la la"; 
?> 

会产生相同的输出

<pre> 
<?php 
echo <<<TEXT 
La la la 
la la la la 
la la la la 
TEXT; 
?> 

或者只是送些<br>秒。正如其他答案所示,您可以使用该函数将这些换行符字符转换为<br>

2

您的浏览器正在处理输出并显示它。原因是没有HTML格式告诉它“换行”,将它分成多行。要使\n在浏览器中换行,您必须使用<br>标记。

$myString = <<<EOT 
My name is "$name". I am printing some $foo->foo. 
Now, I am printing some {$foo->bar[1]}. 
This should print a capital 'A': \x41 
EOT; 

echo nl2br($myString); 

现在有换行符:

可以按如下方式使用功能nl2br()

使用您的代码在顶部,所有你需要做的是echo nl2br($text);,你会得到换行符,多行。