Bonjour tout le monde!
J'ai un petit soucis de compréhension si vous pouviez m'éclairer ça serait sympa.
Problème 1:
Lorsque j'affiche une variable comportant des balises HTML avec la fonction "htmlspecialchars" ou "htmlentities" celles ci ne sont pas interprété comme le veut la fonction mais par contre les caractères HTML ne sont pas remplacés par des entités HTML comme il est stipulé dans la doc.
"&" (et commercial) devient "&
""" (guillemets doubles) devient """ lorsque ENT_NOQUOTES n'est pas utilisée.
"'" (guillemet simple) devient ' uniquement lorsque ENT_QUOTES est utilisée.
"<" (inférieur à) devient "<"
">" (supérieur à) devient ">
ex=> au lieu d'avoir ça :
j'ai ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?php $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; // Résultat:<a href='test'>Test</a> ?>
Certes les balises ne sont pas interpretées mais j'aimerais savoir pourquoi elles ne sont pas remplacé par des entités ( et c'est pareille pour "htmlentities"). Le seul moyen d'avoir un code ou les balises HTML sont remplacées par des entités est de répéter l'opération 2 fois comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?php $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; // Résultat:<a href='test'>Test</a> ?>
Problème 2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <?php $orig = 'J\'ai "sorti" le <strong>chien</strong> tout à l\'heure'; $a = htmlentities(htmlentities($orig)); // J'ai "sorti" le <strong>chien</strong> tout à l'heure $b = htmlentities(htmlspecialchars($orig)); // J'ai "sorti" le <strong>chien</strong> tout à l'heure $c= htmlspecialchars(htmlentities($orig)); // J'ai "sorti" le <strong>chien</strong> tout à l'heure $c= htmlspecialchars(htmlspecialchars($orig)); // J'ai "sorti" le <strong>chien</strong> tout à l'heure ?>
La fonction "mysql_real_escape_string" est utilisé lors de l'insertion de données dans la base de donnée et permet d'éviter les injections SQL en "échappant" les caractères spéciaux comme " ou ' en mettant un antislash avant chaque caractère.
La fonction "stripslash" est utilisé a l'affichage et permet de supprimer les antislashs d'une chaîne.
En résumé selon moi quand on utilise la fonction "mysql_real_escape_string" pour l'insertion dans une base de donnée on utilise forcement la fonction "stripslash" pour l'affichage donc je ne comprends pas le code suivant si jamais il s'avère juste :
On ajoute des antislash avec "mysql_real_escape_string" et on les retires aussi sec avec "stripslashes" ? Cela ne revient-il pas a faire ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php $username=mysql_real_escape_string(stripslashes($_POST['username'])); ?>
et petite dernière question.. il est dit qu'on doit simplement utiliser "mysql_real_escape_string" pour les données qui doivent être inséré dans la base de donnée et non "htmlspecialchars" ou "htmlentities" qui servent uniquement à l'affichage, ce n 'est pas dangereux de laisser s'insérer des balises HTML,JavaScript ou autre dans la base de donnée sachant que "mysql_real_escape_string" ajoute unqiuement un anti-slash aux caractères suivants : NULL, \x00, \n, \r, \, ', "
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php $username= $_POST['username']; ?>
voilou voilou si une âme charitable pouvait m'aider ça serait super sympa!!![]()
Merci d'avance!
Partager