El enfoque correcto para el manejo de las etiquetas depende de sus preferencias de entrada de tratamiento: Usted puede eliminar las etiquetas no válidas en su totalidad, o tratar de limpiar las etiquetas para que sean válidos.
enfoque de lista blanca para definir caracteres válidos se debe utilizar en la limpieza de la entrada - no hay simplemente demasiados caracteres problemáticos a la lista negra.
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='_+#-';
El primer enfoque elimina las etiquetas no válidas en su totalidad:
// 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;
}
El segundo enfoque intenta limpiar las etiquetas:
// 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);
Sustitución de caracteres no válidos con espacios en blanco conduce a problemas veces - para ejemplo, el anterior "str & ing" se convierte en "str ing". Eliminar completamente los caracteres ilegales daría como resultado "cadena", que es más útil en algunos casos.
¿qué es el usuario ingresará "?" ¿personaje? se romperá url – waney
No debería romper la url. – VirtuosiMedia
No se olvide de urlencode() CUALQUIER entrada de usuario. Esto evitará '#' y '?' de romper la URL. – matpie