Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

nl2br qui me pollue mon balisage html

13 réponses
Avatar
SAM
Salutatous,

1 an 1/2 que je ne suis venu ...

Question :
comment dire au PHP de ne pas m'écrire de balise auto-fermante (<br />)
quand on emploi la fonction : nl2br()

Par exemple :

print "<dd>".nl2br(stripslashes($texte[$i]))."</dd>";

où je voudrais obtenir en html :

<dd>blabla 1<br>
blabla suivant<br>
final</dd>

ces balises auto-fermantes ne font pas propre en html "normal"
et le Validator râlotte un peu à ce sujet.

Si par la même occasion il y avait une astuce pour avoir :

<dd>blabla 1<br>
blabla suivant<br>
final</dd>

au lieu de :

<dd>blabla 1<br>
blabla suivant<br>
final</dd>

qui ne fait très propre non plus dans le code html indenté,
ce serait super !

--
Stéphane Moriaux avec/with iMac-intel

3 réponses

1 2
Avatar
SAM
Le 22/03/11 13:02, Olivier Miakinen a écrit :
Le 22/03/2011 07:11, SAM a écrit :

D'autant que je rencontre d'autres problèmes avec
str_replace("n", '<br>')





Autant j'ai un pb avec les retours de ligne du fichier mémoire ?
(mon éditeur texte, par exemple, me propose 3 types de retour de lignes
: Mac, Unix, Windows)



C'est possible. J'ai déjà vu des cas où la conversion était faite
automatiquement entre le "n" traité dans le programme et le "rn"
écrit ou lu sur le disque ou sur le réseau, mais ce n'est peut-être
pas le cas partout.



en fait ce serait à propos de l'exploitation du retour d'un textarea :

[code]
<form action="nltobr.php" method="post">
<div>
<textarea name="texto" colsp rows>Magnifique vêtement très chaud.
Disponible en toutes tailles.
Coton et plumes.
Réversible</textarea>
<p><input type=submit></p>
</div>
</form>
<?php
foreach ($_REQUEST as $key => $val) { $$key = $val; }

function nltobr($string, $is_xhtml, $indent) {
$br = $is_xhtml ? "<br />" : "<br>";
return str_replace("n", "$brn$indent", $string);
}

if(isset($texto) && !empty($texto)) {
echo "
<p>".nltobr(stripslashes(strip_tags($texto)), false, "t ")."
</p>";
}
?>
[/code]

L'echo ci-avant me donne
(avec n'importe quel type de retour de ligne, Mac/Unix/Windows) :

<p>Magnifique vêtement très chaud.
<br>
Disponible en toutes tailles.
<br>
Coton, plumes d'autruche.
<br>
Réversible
</p>

il reste un retour avant le <br>


tandis que :

<?php
$texte = 'Magnifique vêtement très chaud.
Disponible en toutes tailles.
Coton et plumes.
Réversible';
echo "
<p>".nltobr(stripslashes(strip_tags($texte)), false, "t ")."
</p>";
?>

me donne :
<p>Magnifique vêtement très chaud.<br>
Disponible en toutes tailles.<br>
Coton, plumes d'autruche.<br>
Réversible
si le fichier php a été édité avec retours Unix

ou me donne :
<p>Magnifique vêtement très chaud.
Disponible en toutes tailles.
Coton, plumes d'autruche.
Réversible

si édité en "Mac"


Je ne rencontre pas ces difficultés avec nl2br()
... seulement si je suis en Unix ... :-/

<p>Magnifique vêtement très chaud.<br>
Disponible en toutes tailles.<br>
Coton et plumes.<br>
Réversible
</p>

Mébon ... alors ... pas d'indentation.

Tout ça dans l'Apache de mon Mac et avec Firefox.3.6



--
Stéphane Moriaux avec/with iMac-intel
Avatar
Olivier Miakinen
Le 22/03/2011 23:56, SAM a écrit :

en fait ce serait à propos de l'exploitation du retour d'un textarea :

[...]

L'echo ci-avant me donne
(avec n'importe quel type de retour de ligne, Mac/Unix/Windows) :



Même Unix ?

<p>Magnifique vêtement très chaud.
<br>
Disponible en toutes tailles.
<br>
Coton, plumes d'autruche.
<br>
Réversible
</p>

il reste un retour avant le <br>



Essaye peut-être avec ceci :

function nltobr($string, $is_xhtml, $indent) {
$br = $is_xhtml ? "<br />" : "<br>";
return preg_replace("/(?>rn|n|r)/", "$br$0$indent", $string);
}

Ici, au lieu de considérer que le saut de ligne est forcément n, on
traite n'importe lequel des trois cas possibles rn ou n ou r.

Attention, ça fonctionnera tant que $indent ne contient que des
caractères « normaux » (tabulation ou espace c'est parfait). Si
jamais tu pensais vouloir l'utiliser un jour avec des « $ » ou des
« » dans $indent il faudrait faire un traitement supplémentaire.

Cordialement,
--
Olivier Miakinen
Avatar
SAM
Le 23/03/11 01:12, Olivier Miakinen a écrit :
Le 22/03/2011 23:56, SAM a écrit :

en fait ce serait à propos de l'exploitation du retour d'un textarea :

[...]

L'echo ci-avant me donne
(avec n'importe quel type de retour de ligne, Mac/Unix/Windows) :



Même Unix ?



Oui.
re-vérifié
(chez moi !)
(c a d sans passer par un soft de ftp pour être mis sur un serveur externe)

<p>Magnifique vêtement très chaud.
<br>
Disponible en toutes tailles.
<br>
Coton, plumes d'autruche.
<br>
Réversible
</p>

il reste un retour avant le<br>



Essaye peut-être avec ceci :

function nltobr($string, $is_xhtml, $indent) {
$br = $is_xhtml ? "<br />" :"<br>";
return preg_replace("/(?>rn|n|r)/", "$br$0$indent", $string);
}



Ça marche !
Faut-il se faire ses biblis de fonctions PhP alors qu'il y a déjà plétore ?

Merci de ta patience.
--
Stéphane Moriaux avec/with iMac-intel
1 2