Непонятный результат функции Php с nl2br - PullRequest
2 голосов
/ 01 августа 2011

Я просто экспериментирую с PHP, чтобы подготовить меня к будущим проектам, и я столкнулся со строкой, в которую не будет вставлено <br />, даже если это многострочная строка.

Код представляет собой простой PHP (который я заключил в простые HTML-теги)

$ping = passthru('ping www.google.com');
$ping = htmlspecialchars_decode($ping);
$ping = strip_tags($ping);
$ping = nl2br($ping);
echo $ping;

В результате получается многострочная строка, но без добавленных тегов <br />, однако источник страницы показываетрезультат в виде строки, состоящей из нескольких строк, поэтому определенно есть несколько строк, но nl2br() ничего не делает.

Источник страницы (который таинственным образом добавил дополнительные пробельные строки, когда я вставил его сюда)

<html>

    <head>

        <title>Derp</title>



    </head>

    <body><p>



Pinging www.l.google.com [209.85.227.147] with 32 bytes of data:

Reply from 209.85.227.147: bytes=32 time=44ms TTL=48

Reply from 209.85.227.147: bytes=32 time=28ms TTL=48

Reply from 209.85.227.147: bytes=32 time=40ms TTL=48

Reply from 209.85.227.147: bytes=32 time=29ms TTL=48



Ping statistics for 209.85.227.147:

    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

    Minimum = 28ms, Maximum = 44ms, Average = 35ms

</p>

    </body>

</html>

И фактическая строка, показанная на веб-странице:

Pinging www.l.google.com [209.85.227.147] with 32 bytes of data: Reply from 209.85.227.147: bytes=32 time=30ms TTL=48 Reply from 209.85.227.147: bytes=32 time=29ms TTL=48 Reply from 209.85.227.147: bytes=32 time=28ms TTL=48 Reply from 209.85.227.147: bytes=32 time=31ms TTL=48 Ping statistics for 209.85.227.147: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 28ms, Maximum = 31ms, Average = 29ms

После интенсивного поиска в Google все, что я могу найти, это люди, которые не используют nl2br(), когда они должны быть

Что такоеЯ здесь скучаю?

Ответы [ 2 ]

3 голосов
/ 02 августа 2011
<?php 
$ping = `ping www.google.com`;
$ping = nl2br($ping);
echo $ping;
?>

<br />
Pinging www.l.google.com [209.85.147.104] with 32 bytes of data:<br />
<br />
Reply from 209.85.147.104: bytes=32 time=24ms TTL=53<br />
Reply from 209.85.147.104: bytes=32 time=23ms TTL=53<br />
Reply from 209.85.147.104: bytes=32 time=23ms TTL=53<br />
Reply from 209.85.147.104: bytes=32 time=25ms TTL=53<br />
<br />
Ping statistics for 209.85.147.104:<br />
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),<br />

Approximate round trip times in milli-seconds:<br />
    Minimum = 23ms, Maximum = 25ms, Average = 23ms<br />
1 голос
/ 02 августа 2011

Вы не понимаете, что делает passthru($cmd). Он выполняет $cmd, но отправляет stdout непосредственно в браузер - вы не получаете результаты обратно в виде строки. Вместо этого он возвращает код возврата вызванного $cmd.

Если вы хотите захватить вывод, используйте exec и передайте массив $output по ссылке.

...