Expresión regular desinfectar(PHP)
regex preg-replace (5)
Me gustaría limpiar una cadena en una URL, así que esto es lo que básicamente necesito.
- Todo debe ser eliminado, excepto los caracteres y espacios alfanuméricos, y los guiones.
- Los espacios deben ser convertidos en guiones.
P.ej.
This, is the URL!
debe volver
this-is-the-url
Esto lo hará en un shell de Unix (lo probé en mi MacOS):
$ tr -cs A-Za-z ''-'' < infile.txt > outfile.txt
Obtuve la idea de una publicación de blog sobre Más cáscara, menos huevo.
Primera tira de personajes no deseados.
$new_string = preg_replace("/[^a-zA-Z0-9/s]/", "", $string);
Luego cambia los espacios para supresores
$url = preg_replace(''//s/'', ''-'', $new_string);
Finalmente codificarlo listo para su uso.
$new_url = urlencode($url);
Prueba esto
function clean($string) {
$string = str_replace('' '', ''-'', $string); // Replaces all spaces with hyphens.
$string = preg_replace(''/[^A-Za-z0-9/-]/'', '''', $string); // Removes special chars.
return preg_replace(''/-+/'', ''-'', $string); // Replaces multiple hyphens with single one.
}
Uso:
echo clean(''a|"bc!@£de^&$f g'');
Será salida: abcdef-g
fuente: https://.com/a/14114419/2439715
Todas las respuestas anteriores tratan con url, pero en caso de que alguien tenga que desinfectar la cadena para iniciar sesión (por ejemplo) y mantenerla como texto, aquí está:
function sanitizeText($str) {
$withSpecCharacters = htmlspecialchars($str);
$splitted_str = str_split($str);
$result = '''';
foreach ($splitted_str as $letter){
if (strpos($withSpecCharacters, $letter) !== false) {
$result .= $letter;
}
}
return $result;
}
echo sanitizeText(''ОРРииыфвсси ajvnsakjvnHB "&nvsp;/n" <script>alert()</script>'');
//ОРРииыфвсси ajvnsakjvnHB &nvsp;/n scriptalert()/script
//No injections possible, all info at max keeped
function slug($z){
$z = strtolower($z);
$z = preg_replace(''/[^a-z0-9 -]+/'', '''', $z);
$z = str_replace('' '', ''-'', $z);
return trim($z, ''-'');
}