php regex preg-replace sanitization

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.

  1. Todo debe ser eliminado, excepto los caracteres y espacios alfanuméricos, y los guiones.
  2. 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, ''-''); }