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
. 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 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 (
) avec un saut de ligne, avant d'utiliser nl2br()
:
echo str_replace(' ', "\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 (
) par <br />
:
echo str_replace(' ', '<br />', $filtered);
Sorties:
line 1<br />line 2
... mais je ne suis pas sûr à 100% ce que vous essayez de faire.
Avez-vous du code qui montre les nouvelles lignes en cours de conversion en points-virgules? – salathe