Что хорошего в характере новой строки? - PullRequest
5 голосов
/ 17 февраля 2009

Я не совсем понимаю: какова цель символа новой строки?

Если я сделаю это:

<?php
echo "This is a test. \n";
echo "This is another test.";
?> 

Код приводит к тому, что оба предложения находятся в одной строке. Почему \ n не вызывает второе предложение во второй строке?

Предложения каждый в своей строке, если я сделаю:

<?php
echo "This is a test. <br>";
echo "This is another test.";
?>

Но я также видел, как люди делают это:

<?php
echo "This is a test. <br>\n";
echo "This is another test.";
?> 

Что по сути приводит к тому же выводу, что и второй фрагмент кода. Кто-то хочет объяснить это?

Ответы [ 13 ]

38 голосов
/ 17 февраля 2009

Стандарт HTML рассматривает разрыв строки как еще один символ пробела, поэтому существует тег <br>. Однако обратите внимание, что разрыв строки будет работать внутри тега <pre> или элемента с пробелом : pre в стиле CSS.

Третий пример - просто сделать «красивый» HTML: он упрощает «просмотр исходного кода» и проверку его на глаз. В противном случае у вас есть большая длинная строка HTML.

9 голосов
/ 17 февраля 2009

Как вы заметили, существуют разные способы создания новой линии.

<br />

это не символ новой строки, это тег XHTML , что означает, что он работает в XHTML. правильно говоря, это не символ новой строки, но тег гарантирует, что он вставлен = это вызывает разрыв строки. закрывающий тег обязателен.

Характеристики XHTML


<br>

это HTML-тег, который вызывает разрыв строки. закрывающий тег запрещен.

HTML 4.1 спецификации


\n

является escape-последовательностью для новой строки ASCII char LF. Распространенной проблемой является использование '\ n' при обмене данными с использованием интернет-протокола, который предписывает использование ASCII CR + LF для конечных строк. Запись '\ n' в поток текстового режима работает правильно в системах Windows, но производит только LF в Unix и что-то совершенно другое в более экзотических системах. Использование "\ r \ n" в двоичном режиме немного лучше, так как оно работает во многих ASCII-совместимых системах, но в общем случае не работает. Одним из подходов является использование двоичного режима и непосредственное указание числовых значений управляющей последовательности, "\ x0D \ x0A".

подробнее


PHP_EOL

- это константа новой строки php, которая заменяется правильной новой строкой, зависящей от системы.

так что сообщение, используйте все в нужном месте.

6 голосов
/ 17 февраля 2009

<br> даст вам новую строку в представлении пользователя; \n даст вам новую строку в исходном коде, т.е. взгляд разработчика.

4 голосов
/ 17 февраля 2009

Когда отображается html, только "<br />" отображает строку разрыва. Однако разметка намного легче читается при печати «<br />\n», так что все не в одной длинной строке.

3 голосов
/ 17 февраля 2009

\n на основе кода

<br /> на основе тегов HTML

Между ними есть четкое различие.

2 голосов
/ 17 февраля 2009

HTML не заботится о новых строках в исходном коде, вы можете поместить все это в одну строку. Он будет интерпретировать только <br /> как новую строку. Вы должны использовать \ n, чтобы украсить свой HTML-вывод, но лучше не выводить его с помощью PHP, а использовать его в самом HTML и только встраивать в него PHP-компоненты, например:

<ul id="menu">
    <?php foreach ($menu_items as $item): ?>
    <li>
        <a href="<?= htmlspecialchars($item['link']) ?>" title="<?= htmlspecialchars($item['title']) ?>">
            <?= htmlspecialchars($item['title']) ?>
        </a>
    </li>
    <?php endforeach; ?>
</ul>

Таким образом, вам не придется беспокоиться о форматировании в PHP, но вы автоматически создадите его в HTML. Кроме того, вы разделяете Model-logic и View-logic друг от друга следующим образом и оставляете выходные данные на своем HTTP-сервере, а не на движке PHP.

2 голосов
/ 17 февраля 2009

Ваша проблема в способе рендеринга html. Если вы посмотрите в исходном коде, первый пример будет иметь две строки на отдельных строках, но браузер не видит разрывы строк как разрывы, которые должны отображаться. Это позволяет вам иметь длинный абзац в вашем источнике:

rghruio grgo rhgior hiorghrg hg rgui  
ghergh ugi rguihg rug hughuigharug 
hruauruig huilugil guiui rui ghruf hf 
uhrguihgui rhguibuihfioefhw8u 
beruvbweuilweru gwui  rgior

Это может быть выполнено только в соответствии с необходимостью браузера, что позволяет легко редактировать его на нужной длине строки, но отображать в любом разрешении.

1 голос
/ 17 февраля 2009

Хотя он также используется при написании веб-сценариев, имейте в виду, что PHP - это больше, чем веб-движок; он также имеет CLI, где тег br бесполезен.

1 голос
/ 17 февраля 2009

Символ новой строки полезен для строковых функций.

Например:

   explode( '\n' , $input );

Будет разбивать строку на новую строку.

str_replace( '\n' , '<br />' , $input );

Заменил бы каждую новую строку в $ input тегом br.

Кроме того, поскольку PHP также имеет CLI, \ n полезно для форматирования:

например.

echo 'Hello world';

Будет ли в CLI выводить;

Hello worldphp>

echo 'Hello world' . "\n";

будет выводить;

Привет, мир
PHP>

1 голос
/ 17 февраля 2009

В противном случае полезен символ новой строки, например, в PDF. Вы правы, что символ новой строки имеет очень мало общего с HTML, как говорили другие люди, он рассматривается как еще один символ пробела. Хотя это полезно внутри тега <pre>. Его также можно использовать для форматирования вывода HTML, чтобы его было легче читать. (Немного раздражает попытка найти фрагмент HTML в строке шириной 1000 символов.)

Символ новой строки также полезен при хранении данных в базе данных. Обычно вы хотите хранить данные без специальных символов HTML, таких как <br />, чтобы их можно было легко использовать в других форматах (опять же, таких как PDF). На выходе вы хотите использовать функцию nl2br() для преобразования новых строк в <br /> s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...