Добавляем символы перехода к новой строке


Лучше всего, для перехода на новую строку на PHP использовать следующую конструкцию:

$nl = chr(13).chr(10);

После этого переменную $nl можно вставлять в любом тексте или при создании письма, например.

Уже при первых тестах процедуры для предварительного просмотра сообщений мы обнаружили, что хотя форма и передает символы перехода к новой строке, однако игнорирует эти символы при предварительном просмотре.

Причины этой ошибки достаточно просты, и мы их уже обсуждали в главе 3. При нажатии на клавишу Enter, которая служит для перехода к новой строке при редактировании сообщения, в текст добавляются ASCII-коды «13» (возврат каретки) и «10» (новая строка), которые вместе играют роль символа перехода к новой строке при выводе на экран обычного текста. Однако они утрачивают эту функцию в HTML, где для перехода к новой строке используются тэги <р> и <br>. Таким образом, оказывается, что хотя сами значения абсолютно верны, они неправильно отображаются при предварительном просмотре (рис. 9.6).

Существует несколько возможностей исправить эту ошибку. Можно ее просто проигнорировать. Однако это слишком неудачное решение, которое может отпугнуть посетителей нашего сайта.

Мы можем каждый раз при выводе на экран заменять последовательность символов «1310» на тэг <br>. После этого при предварительном просмотре будет точно передаваться оригинальная структура сообщения. Однако этот способ не рекомендуется, так как если одиночный символ перехода к новой строке вставлен в исходный текст по ошибке, то это может привести к тому, что сообщение при просмотре будет выглядеть не очень привлекательно.

Кроме этого, имеется возможность просто игнорировать последовательность «1810» и обрабатывать только два последовательно стоящих символа перехода к новой строке - мы здесь исходим из того, что автор хотел начать новый абзац и заменяем последовательность «13101310» на символы <br><br>. Этот способ является разумным компромиссом, и именно его мы и будем использовать в дальнейшем.
При этом само значение переменной $input не должно изменяться, замена одних символов па другие производится только при выводе на экран при предварительном просмотре или при выводе на экран всех сообщений, содержащихся в гостевой книге.
Ранее для вы вода па экран значен ия $input мы использовали следующий гибрид PHP и HTML:

<p><?=htmlspecialchars($input) ?></р>

Вместо функции htmlspecialchars() мы будем использовать собственную функцию под названием format(), задачей которой является не только преобразование в корректный HTML-код, но и вставка тэгов <br>. В результате строка для вывода на экран переменной $input принимает следующий вид:

<р><?=format($input)?></р>

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

substr_replace().

Для поиска последовательности символов «13101310» мы можем использовать запись chr(13).chr(10), однако существует более простой и наглядный способ. Для ASCII-кода 13, то есть для возврата каретки, может использоваться обозначение \r, а для ASCII-кода 10, то есть для перехода к новой строке - обозначение \n. Таким образом, мы можем записать последовательность, которую хотим найти, в виде \r\n.
Показанная ниже команда позволяет заменить в переменной $text эту последовательность на пару тэгов <br>;

str_replace("\r\n\r\n", "<br><br>", $text);

Итак, без особых проблем получаем следующий код для функции format:

function format ($text) {
$result = htmlspecialchars($text);
$result = str_replace ("\r\n\r\n", "<br><br>", $result);
return $result;
}

 


Тэги:

Комментарии: 2

Прокомментировать »

 
 
Derrickpaype
2.09.2017
 

Bfhuwe fwbihfwei wbfeihfiw jbfiwfv iwefibwe 87ty439hgg

Derrickpaype
3.09.2017
 

Bfhuwe fwbihfwei wbfeihfiw jbfiwfv iwefibwe 87ty439hgg

 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика