L'approccio corretto alla gestione dei tag dipende dalle preferenze sull'elaborazione dell'input: è possibile rimuovere completamente i tag non validi oppure provare e pulire i tag in modo che diventino validi.
L'approccio whitelist alla definizione di caratteri validi deve essere utilizzato per la pulizia dell'input: ci sono semplicemente troppi caratteri problematici nella lista nera.
mb_internal_encoding('utf8');
$tags= 'to# do!"¤ fix-this str&ing';
$allowedLetters='\w';
// Note that the hyphen must be first or last in a character class pattern,
// to match hyphens, instead of specifying a character set range
$allowedSpecials='_+#-';
Il primo approccio elimina i tag non validi del tutto:
// The first way: Ignoring invalid tags
$tagArray = mb_split(' ', $tags);
$pattern = '^[' . $allowedLetters . $allowedSpecials . ']+$';
$validTags = array();
foreach($tagArray as $tag)
{
$tag = trim($tag);
$isValid = mb_ereg_match($pattern, $tag);
if ($isValid)
$validTags[] = $tag;
}
Il secondo approccio cerca di pulire i tag:
// The second way: Cleaning up the tag input
// Remove non-whitelisted characters
$pattern = '[^' . $allowedLetters . $allowedSpecials .']';
$cleanTags = mb_ereg_replace($pattern, ' ', $tags);
// Trim multiple white spaces.
$pattern = '\s+';
$cleanTags = mb_ereg_replace($pattern, ' ', $cleanTags);
$tags = mb_split(' ',$cleanTags);
Sostituzione caratteri non validi con spazi bianchi porta a problemi a volte - per esempio il precedente "str & ing" viene convertito in "string". Rimuovere completamente i caratteri non validi risulterebbe in "stringa", che in alcuni casi è più utile in .
fonte
2009-03-27 08:09:28
cosa viene inserito dall'utente "?" carattere? si romperà l'url – waney
Non dovrebbe rompere l'url. – VirtuosiMedia
Non dimenticare di urlencode() QUALSIASI input utente. Questo impedirà '#' e '?' da rompere l'URL. – matpie