Bonjour,
echo nl2br(htmlentities($val['texte']));
doit fonctionner.
J'ai moi-même fait le test avec une variable que j'appelle $variable
(au lieu de $val['texte'] mais c'est pareil, tu appelles ta variable comme tu veux).
nl2br(htmlentities($variable));
donne le même rendu à l'écran que:
(si bien sûr tu n'as pas d'injection xss dans un script côté serveur)
à la grande différence, bien sûr, que ta première ligne est protégée contre
les injections xss et l'autre non, chose que tu ne vois pas à l'oeil nu.
Donc si ça doit fonctionner, à moins que ton affichage se fasse à l'intérieur d'un
input (dans ce cas oui htmlentities risque de ne pas fonctionner).
Si c'est le cas, pourquoi ne pas utiliser à la place des expressions régulières
qui font barrage aux 2 chevrons, au et commercial, aux guillemets simples et
aux guillemets doubles (pour reprendre les caractères couverts par htmlspecialchars,
sachant que ce dernier est suffisant, tu n'as pas besoin d'aller jusqu'à utiliser htmlentities
pour te protéger des injections xss).
Maintenant, si tout ça c'est nouveau pour toi, renseigne-toi (par internet par exemple,
tu y trouves de nombreux tutos et messages d'autres utilisateurs) déjà sur
ce qu'on appelle injections xss et injections sql.
A mon avis ça c'est le début pour prendre les choses par le bon bout.
Quand tu parles de htmlentities c'est pour te protéger des injections xss.
Il s'agit en gros d'un script javascript malveillant qui reste dans ta bdd jusqu'à
ce que son contenu soit appelé pour être affiché à l'écran, et l'utilisateur peut être par
exemple redirigé vers un site "pas très fréquentable".
mais il faut savoir qu'il existe aussi des injections sql (tu connais peut-être mysqli_real_escape_string qui sert à s'en prémunir) bien plus dangereuses encore puisqu'elles attaquent le contenu de ta bdd.
Je pense qu'il faut déjà que tu regardes ici et là pour différencier ces deux types d'attaques, et voir comment s'en prémunir.
Tu remarqueras aussi que tu as un point-virgule en trop au début
de la deuxième ligne que tu as écrit.