2009-07-21 12 views

Répondre

3

Avec array_walk() vous pouvez écrire votre fonction de nettoyage de l'étiquette séparément, puis appliquer facilement à vos données entrantes.

function sterilize(&$val,$key) 
{ 
    //do whatever security you need here 
    $val = trim($val); 
    $val = strip_tags($val); 
    //etc 
    return htmlspecialchars($val); 
} 
$bad_values = explode(',',$_GET['tags']); 
array_walk($bad_values,'sterilize'); 
+0

Vous n'avez pas utilisé 'strip_tags()' n'importe où. –

+0

La façon dont la question a été posée, "Quel est un moyen rapide de rogner chaque élément et effectuer des fonctions de sécurité (dépouillement html, caractères spéciaux)?" m'a semblé laisser une certaine ambiguïté quant aux fonctions de sécurité qui seraient réellement appliquées, alors j'ai séparé les préoccupations. Vous pouvez écrire la fonction sterilize() comme vous le souhaitez. Je peux ajouter dans le décapage des étiquettes pour la concision je suppose. – zombat

+0

J'ai toujours utilisé 'array_map()' mais je suppose que 'walk' est plus efficace si vous n'en avez pas besoin? – mpen

1

Effectuez les opérations suivantes:

function process_tags($tags) { 
    $tags = strip_tags($tags); 
    $tags = explode(',', $tags); 
    foreach($tags as $key => $value) { 
     $tags[$key] = htmlentities($tags[$key]); 
     $tags[$key] = trim($tags[$key]); 
    } 

    return $tags; 
} 

Vous pouvez simplement appeler la fonction de la manière suivante:

$myTags = "apples, berries, oranges"; 
$tags = process_tags($myTags); 
+0

@ Chacha102: Non, car vous voulez couper les délimiteurs (','). Couper à l'avance ne le fera pas. –

+0

Ahh ... la suppression de la magie du commentaire ... –

+0

N'y aurait-il pas moyen de supprimer toutes les nouvelles lignes/autres caractères sans passer par une instruction foreach? –

1

En utilisant array_map pour appliquer trim() et htmlentities à tous les éléments du tableau, vous pouvez le faire en une ligne:

$tags = array_map('htmlentities', array_map('trim', explode(',', strip_tags($_GET["tags"])))); 
1

Soyez prudent lorsque vous faites cela. L'échappement HTML est une tâche sortie, et pas quelque chose que vous voulez faire avec des données que vous n'avez pas l'intention d'imprimer immédiatement sur la page.

Je pense que ce pages d'être assez explicite avec ce genre de chose, et vraiment séparer le filtrage du contenu de la échapper de contenu.

// First, get the tags as an array, filtered to be valid data 
$tags = array_map('filterTag', explode(',', $_GET['tags'])); 

// Do whatever other processing with $tags 

// NOW, create a version of the tags that you'll use for display only 
// or do this step ONLY just prior to display 
$tagsSafeForHtml = array_map('escapeForHtml', $tags); 

function filterTag($tag) 
{ 
    // Use whatever combination of filtering functions you want 
    return trim(strip_tags($value)); 
} 

function escapeForHtml($value) 
{ 
    // Use whatever escaping strategy that makes most sense for your content 
    return htmlspecialchars($value, ENT_COMPAT, 'UTF-8'); 
} 
Questions connexes