Преобразование <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 в строках.

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

Попробуй это

 <? $text = "Hello <br /> Hello again <br> Hello again again <br/> Goodbye <BR>"; $breaks = array("<br />","<br>","<br/>"); $text = str_ireplace($breaks, "\r\n", $text); ?> <textarea><? echo $text; ?></textarea> 

Я использую следующую конструкцию для преобразования назад nl2br

 function br2nl( $input ) { return preg_replace('/<br\s?\/?>/ius', "\n", str_replace("\n","",str_replace("\r","", htmlspecialchars_decode($input)))); } 

здесь я заменил символы \n и \r из $ input, потому что nl2br не удаляет их, и это вызывает неправильный вывод с \n\n или \r<br> .

Ответ от @Mobilpadde хорош. Но это мое решение с регулярным выражением, использующее preg_replace, которое может быть быстрее в соответствии с моими испытаниями.

echo preg_replace('/<br\s?\/?>/i', "\r\n", "testing<br/><br /><BR><br>");

 function function_one() { preg_replace('/<br\s?\/?>/i', "\r\n", "testing<br/><br /><BR><br>"); } function function_two() { str_ireplace(['<br />','<br>','<br/>'], "\r\n", "testing<br/><br /><BR><br>"); } function benchmark() { $count = 10000000; $before = microtime(true); for ($i=0 ; $i<$count; $i++) { function_one(); } $after = microtime(true); echo ($after-$before)/$i . " sec/function one\n"; $before = microtime(true); for ($i=0 ; $i<$count; $i++) { function_two(); } $after = microtime(true); echo ($after-$before)/$i . " sec/function two\n"; } benchmark(); 

Результаты:

 1.1471637010574E-6 sec/function one (preg_replace) 1.6027762889862E-6 sec/function two (str_ireplace) 

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

 class orbisius_custom_string { /** * The reverse of nl2br. Handles <br/> <br/> <br /> * usage: orbisius_custom_string::br2nl('Your buffer goes here ...'); * @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; } } 

EDIT: предыдущий ответ был назад от того, что вы хотели. Используйте str_replace. замените с помощью \ n

 echo str_replace('<br>', "\n", $var1); 
 <?php $var1 = "Line 1 info blah blah <br /> Line 2 info blah blah"; $var1 = str_replace("<br />", "\n", $var1); ?> <textarea><?php echo $var1; ?></textarea>