55 votes

Conversion<br /> dans une nouvelle ligne à utiliser dans une zone de texte

Si j'ai une variable :

 $var1 = "Line 1 info blah blah <br /> Line 2 info blah blah";

Et une zone de texte :

 <textarea>echo $var1</textarea>

Comment puis-je faire en sorte que la zone de texte affiche une nouvelle ligne au lieu d'afficher le texte sur un seul comme avec un <br /> dedans ?

Edit : j'ai essayé ce qui suit :

 <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>

Cependant, la zone de texte contient toujours les br dans les lignes.

103voto

Mobilpadde Points 1303

Essaye celui-là

 <?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);  
?>  
<textarea><?php echo $text; ?></textarea>

18voto

aftamat4ik Points 626

j'utilise la construction suivante pour reconvertir nl2br

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

ici, j'ai remplacé les \n et \r de $input parce que nl2br ne les a pas supprimés et cela provoque une mauvaise sortie avec \n\n ou \r<br> .

5voto

defaye Points 856

La réponse de @Mobilpadde est sympa. Mais c'est ma solution avec regex utilisant preg_replace qui pourrait être plus rapide selon mes tests.

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();

Résultats:

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

1voto

lordspace Points 384

Voici une autre approche.

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

0voto

Crashspeeder Points 4101

EDIT: la réponse précédente était à l'envers de ce que vous vouliez. Utilisez str_replace. remplacer <br> par \n

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X