stephrav
Invité n'ayant pas de compte PHPfrance
27 févr. 2012, 16:42
Depuis la parution de PHP 5, les concepteurs et distributeurs du langage semblent renoncer à cet échappement automatique. Le problème est de risquer de se trouver dans une situation où certain serveurs pratiquent l’échappement et d’autres non.
Le seul moyen pour régler le problème une fois pour toutes et de normaliser systématiquement les données HTTP.
Personnellement, je préfères tester, à l’entrée de tout script, si le mode d’échappement automatique est activé. Si oui, on supprime cet échappement, pour toutes les chaînes transmises, avec la fonction stripSlashes(). On peut alors considérer par la suite que les données HTTP sont représentées normalement, comme n’importe quelle autre chaîne de caractères manipulée dans le script.
Voici la fonction qui effectue cette opération sur chacun des tableaux contenant d’une part des données transmises en mode get ou post, d’autre part des cookies.
// Application de la suppression des échappements, si nécessaire, dans tous les tableaux contenant les données HTTP
function Normalisation( )
{
// Dans le cas ou l'on est en échappement automatique, on rectifie
if(get_magic_quotes_gpc ( ) )
{
$_POST = NormalisationHTTP($_POST) ;
$_GET = NormalisationHTTP($_GET) ;
$_REQUEST = NormalisationHTTP($_REQUEST) ;
$_COOKIE = NormalisationHTTP($_COOKIE) ;
}
}
// Puis la fonction de suppression des échappements automatique des données HTTP dans un tableau de quelconque dimension
function NormalisationHTTP($tableau)
{
// Parcours du tableau
foreach ($tableau as $cle => $valeur)
{
if(!is_array($valeur) ) // C'est un élément, on agît
{
$tableau[$cle] = stripSlashes($valeur) ;
} else // c'est un tableau, on appelle récursivement
{ $tableau[$cle] = NormalisationHTTP($valeur) ; }
}
return $tableau;
}
Bien évidement, je ne sorts pas cela d'une marmite. Je vous recommande donc vivement le livre de Philippe Rigaux : Pratique de MySQL et PHP qui est particulièrement bien structuré et méthodique.