Преобразование <br /> в новую строку для использования в текстовом поле
У меня есть переменная:
$var1 = "Line 1 info blah blah <br /> Line 2 info blah blah";
И текстовая область:
<textarea>echo $var1</textarea>
Как сделать так, чтобы текстовая область отображала текст с переносами строк, вместо того чтобы выводить его в одной строке с тегами <br />
?
Редактирование: Я пробовал следующее:
<textarea class="hobbieTalk" id="hobbieTalk" name="hobbieTalk" cols="35" rows="5" onchange="contentHandler('userInterests',this.id,this.value,0)"><?php
$convert=$_SESSION["hobbieTalk"];
$convert = str_replace("<br />", "\n", $convert);
echo $convert;
?></textarea>
Однако текстовая область все еще содержит теги <br />
в строках.
5 ответ(ов)
В вашем коде используется функция str_ireplace
для замены HTML-тегов <br />
, <br>
и <br/>
на символы переноса строки \r\n
. Это позволит отобразить текст в элементе <textarea>
с правильными переносами строк. Ваш код выглядит правильно, однако, перед выводом в <textarea>
лучше сначала использовать функцию htmlspecialchars
, чтобы избежать проблемы с интерпретацией HTML-тегов.
Вот обновленная версия вашего кода:
<?php
$text = "Hello <br /> Hello again <br> Hello again again <br/> Goodbye <BR>";
$breaks = array("<br />","<br>","<br/>");
$text = str_ireplace($breaks, "\r\n", $text);
$text = htmlspecialchars($text); // Экранируем специальные символы HTML
?>
<textarea><?php echo $text; ?></textarea>
Теперь, когда вы запустите этот код, текст в <textarea>
будет корректно отображаться с переносами строк и без риска интерпретации HTML-тегов браузером.
Вам нужно заменить <br>
на \n
в строке? Вы можете использовать функцию str_replace
. Вот как это сделать:
echo str_replace('<br>', "\n", $var1);
Таким образом, все вхождения <br>
в переменной $var1
будут заменены на символ новой строки \n
.
Ваш код для преобразования HTML-тегов <br>
обратно в символы новой строки выглядит в целом правильно, однако у вас есть несколько моментов, которые можно улучшить для большей надежности.
Вот как вы написали свою функцию br2nl
:
function br2nl( $input ) {
return preg_replace('/<br\s?\/?>/ius', "\n", str_replace("\n","",str_replace("\r","", htmlspecialchars_decode($input))));
}
Ваша идея удалить символы \n
и \r
из $input
перед заменой тегов <br>
на новую строку — это разумный подход, чтобы избежать проблем с лишними строками, например, если в вашем исходном тексте уже есть символы новой строки или возврата каретки. Однако, это может не всегда быть оптимальным решением, так как вы можете потерять содержимое с этими символами.
Вместо этого, я бы рекомендовал более аккуратно управлять этими символами. Если вы хотите сохранить оригинальные символы новой строки и просто преобразовать <br>
в \n
, вы можете использовать такую реализацию:
function br2nl($input) {
// Прежде всего, декодируем HTML
$input = htmlspecialchars_decode($input);
// Заменяем <br> на новую строку
$input = preg_replace('/<br\s*\/?>/iu', "\n", $input);
// Возвращаем результат
return $input;
}
Таким образом, данный код удаляет только <br>
теги и заменяет их на символ новой строки, не затрагивая существующие \n
и \r
. Это может помочь вам избежать ситуации с ненужными пустыми строками в выходных данных.
Также можете рассмотреть использование trim()
в конце функции, если хотите убрать лишние пробелы или пустые строки в начале и в конце результата.
Такой подход поможет сохранить структуру вашего текста лучше и избежит появления дополнительных пустых строк.
Вот еще один подход.
class orbisius_custom_string {
/**
* Обратная операция к nl2br. Обрабатывает теги <br/> <br/> <br />
* Использование: orbisius_custom_string::br2nl('Ваш текст здесь ...');
* @param str $buff
* @return str
* @author Slavi Marinov | http://orbisius.com
*/
public static function br2nl($buff = '') {
$buff = preg_replace('#<br[/\s]*>#si', "\n", $buff);
$buff = trim($buff);
return $buff;
}
}
Этот код определяет класс orbisius_custom_string
с статическим методом br2nl
, который заменяет HTML-теги переноса строки <br/>
на символ новой строки \n
. Метод принимает строку $buff
в качестве входного параметра, выполняет замену с помощью регулярного выражения и возвращает результат. Чтобы использовать метод, просто вызовите orbisius_custom_string::br2nl('Ваш текст здесь ...');
.
Ваш код использует функцию str_replace
для замены <br />
на символ новой строки \n
, но имейте в виду, что в HTML textarea \n
будет отображаться как перенос строки.
Вот перевод вашего кода на русский, с объяснением:
<?php
$var1 = "Информация в строке 1 blah blah <br /> Информация в строке 2 blah blah";
$var1 = str_replace("<br />", "\n", $var1);
?>
<textarea><?php echo $var1; ?></textarea>
Здесь переменная $var1
содержит текст с HTML-тегом <br />
, после чего этот тег заменяется на перенос строки. В итоге, когда вы выводите $var1
в textarea, строки "Информация в строке 1" и "Информация в строке 2" будут отображаться на отдельных строках благодаря использованию \n
.
Если у вас возникнут дополнительные вопросы по обработке HTML в PHP или работе с textarea, не стесняйтесь задавать их!
PHP-функция mail не завершает отправку электронной почты
Несколько файлов JavaScript/CSS: лучшие практики?
Как расположить div внизу своего контейнера?
Как читать большой файл построчно?
Почему нельзя вызывать абстрактные функции из абстрактных классов в PHP?