0

Преобразование <br /> в новую строку для использования в текстовом поле

12

У меня есть переменная:

$var1 = "Line 1 info blah blah &lt;br /&gt; 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("&lt;br /&gt;", "\n", $convert);
echo $convert;

?></textarea>

Однако текстовая область все еще содержит теги <br /> в строках.

5 ответ(ов)

1

В вашем коде используется функция 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-тегов браузером.

0

Вам нужно заменить <br> на \n в строке? Вы можете использовать функцию str_replace. Вот как это сделать:

echo str_replace('<br>', "\n", $var1);

Таким образом, все вхождения <br> в переменной $var1 будут заменены на символ новой строки \n.

0

Ваш код для преобразования 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() в конце функции, если хотите убрать лишние пробелы или пустые строки в начале и в конце результата.

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

0

Вот еще один подход.

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('Ваш текст здесь ...');.

0

Ваш код использует функцию 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, не стесняйтесь задавать их!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь