2010-06-30 4 views
4

Est-ce que quelqu'un sait comment empêcher FILTER_SANITIZE_SPECIAL_CHARS de convertir les sauts de ligne (\ n) en (& # 10;). Je développe un simple système de commentaire pour mon site web et j'ai trouvé que le filtre php convertit \ n en donc quand on utilise nl2br() il n'y a pas de saut de ligne.FILTER_SANITIZE_SPECIAL_CHARS problème avec sauts de ligne

aide s'il vous plaît.

merci :)

+0

Avez-vous du code qui montre les nouvelles lignes en cours de conversion en points-virgules? – salathe

Répondre

12

filter_var avec l'option FILTER_SANITIZE_SPECIAL_CHARS fait ce qu'il est censé faire:

HTML-évasion » <> & et caractères à valeur ASCII inférieur à 32, le cas échéant bande ou codent pour d'autres caractères spéciaux.

La nouvelle ligne Le caractère (\n) a une valeur ASCII inférieure à 32, il sera donc converti en &#10;. Vous pouvez donc utiliser html_entity_decode pour les convertir à leurs personnages originaux:

$string = "line 1\nline 2"; 
$filtered = filter_var($string, FILTER_SANITIZE_SPECIAL_CHARS); 
echo "$filtered\n"; 
echo(html_entity_decode($filtered)); 

Sorties:

line 1&#10;line 2 
line 1 
line 2 

Mais je pense que les défaites l'objet de l'utilisation FILTER_SANITIZE_SPECIAL_CHARS en premier lieu.

Si seule la nouvelle ligne qui est à l'origine du problème, vous pouvez remplacer l'entité de caractères HTML (&#10;) avec un saut de ligne, avant d'utiliser nl2br():

echo str_replace('&#10;', "\n", $filtered); 

Sorties:

line 1 
line 2 

Ou peut-être encore mieux, passez l'étape intermédiaire, et remplacez l'entité de caractère HTML (&#10;) par <br />:

echo str_replace('&#10;', '<br />', $filtered); 

Sorties:

line 1<br />line 2 

... mais je ne suis pas sûr à 100% ce que vous essayez de faire.

+0

je vous remercie beaucoup! ça marche! J'ai vraiment essayé cela avant d'envoyer la demande mais c'était le mauvais chemin;) merci beaucoup. – med87

Questions connexes