Wenn ich eine Variable habe:
$var1 = "Line 1 info blah blah <br /> Line 2 info blah blah";
Und einen Textbereich:
<textarea>echo $var1</textarea>
Wie kann ich dafür sorgen, dass im Textbereich eine neue Zeile angezeigt wird, anstatt den Text in einer einzelnen Zeile mit einem <br />
anzuzeigen?
Edit: Ich habe folgendes versucht:
<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>
Der Textbereich enthält jedoch weiterhin die br
-Tags in den Zeilen.
Probier diese
<?
$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>
ich verwende folgende Konstruktion, um nl2br zurück zu konvertieren
function br2nl( $input ) {
return preg_replace('/<br\s?\/?>/ius', "\n", str_replace("\n","",str_replace("\r","", htmlspecialchars_decode($input))));
}
hier ersetzte ich \n
und \r
symbole aus $ input, da nl2br sie nicht entfernt und dies zu falscher Ausgabe mit \n\n
oder \r<br>
führt.
Die Antwort von @Mobilpadde ist Nizza. Aber das ist meine Lösung mit Regex mit preg_replace , die nach meinen Tests schneller sein könnte.
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();
Ergebnisse:
1.1471637010574E-6 sec/function one (preg_replace)
1.6027762889862E-6 sec/function two (str_ireplace)
Hier ist ein anderer Ansatz.
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;
}
}
BEARBEITEN: Die vorherige Antwort war hinter dem, was Sie wollten. Verwenden Sie str_replace . Ersetzen Sie <br>
durch\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>