2011-05-14 29 views
31

如果我有一個變量:轉換<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標籤。

+0

[我發現這個答案是有用的。](https://stackoverflow.com/questions/2494754/opposite-of-nl2br-is-it-str-replace)似乎沒有匹配的任何上面的答案。 – digifrog 2017-06-28 15:20:46

回答

63

試試這個

<? 
    $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> 
+8

謝謝大家:請注意,如果您使用轉換後的html標籤將此字符串存儲在數據庫中,則必須輸入:$ breaks = array(「
」,「
」,「
」,「
」,「< br/「>」,「< br/>」,「<br>」);歡呼全部 – someguy 2011-05-16 17:45:04

+0

$ text = str_ireplace($ breaks,「」,$ text);對我更好! :-) – bestprogrammerintheworld 2016-01-11 07:59:21

+0

@bestprogrammerintheworld這個$ text = str_ireplace($ breaks,「」,$ text);你可以使用'strip_tags($ text)' – Naumov 2016-02-04 10:51:41

0

編輯:以前的回答是你想要的東西倒退。使用str_replace。 與\ n

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

它恰恰相反,將所有換行符轉換爲br標籤。 – 2011-05-14 19:40:07

0
<?php 

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

?> 

<textarea><?php echo $var1; ?></textarea> 
+0

str_replace(「
」,「\ n」,$ var1) - 失敗它仍然生成
輸出 – someguy 2011-05-14 19:42:21

+0

您是否將$ var1設置爲等於?所以: $ var1 = str_replace(「
」,「\ n」,$ var1); – 2011-05-14 19:43:26

+0

您的示例中存在缺陷。參見:http://codepad.org/wUL6BJBb – 2011-05-14 19:44:33

1

這裏是另一種方法代替<br>

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; 
    } 
} 
2

@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) 
8

我是使用下面的結構轉換從$輸入回nl2br

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

這裏我更換\n\r符號,因爲nl2br多申不要刪除它們這會導致與\n\n\r<br>錯誤的輸出。