2010-06-11 8 views
17

Me gustaría desinfectar una cadena en una URL así que esto es lo que básicamente necesito.Regular Expression Sanitize (PHP)

  1. Todo se debe eliminar excepto los caracteres alfanuméricos y los espacios y los puntos.
  2. Los espacios deben convertirse en guiones.

Eg.

This, is the URL! 

debe volver

this-is-the-url 
+0

no podemos ver nada, por favor formatee su código correctamente. – jigfox

+0

Hola jens, no tengo ni idea del código y para eso necesito ayuda. Lo único que sé es que debería usar preg_replace() pero no sé cuál debería ser la expresión regular. Gracias –

Respuesta

40
function slug($z){ 
    $z = strtolower($z); 
    $z = preg_replace('/[^a-z0-9 -]+/', '', $z); 
    $z = str_replace(' ', '-', $z); 
    return trim($z, '-'); 
} 
+0

gracias ... Solo una edición ... Quiero eliminar guiones desde el principio hasta el final antes de devolver $ z en caso de que existan. –

+0

@ atif089: se agregó – SilentGhost

+0

-1: Lectura entre las líneas de lo que SilentGhost * pretende * en lugar del código que ha escrito. esto parece url-safe, es a costa de la pérdida de información. La forma correcta de codificar datos para una URL es usar urlencode(). – symcbean

3

primera tira caracteres no deseados

$new_string = preg_replace("/[^a-zA-Z0-9\s]/", "", $string); 

Luego cambia espacios para unserscores

$url = preg_replace('/\s/', '-', $new_string); 

Finalmente codificarlo listo para su uso

$new_url = urlencode($url); 
+1

subrayado es un carácter diferente: '_' es un guión bajo,' -' es un guión. También el uso de 'urlencode' en una cadena de este tipo no cambia nada. También estás olvidando hypen en la primera expresión regular y '\ s' no es equivalente al carácter de espacio. – SilentGhost

0

Esto lo hará en una cáscara de Unix (he intentado en mi MacOS):

$ tr -cs A-Za-z '-' <infile.txt> outfile.txt 

me ocurrió la idea de un blog el More Shell, Less Egg

1

Pruebe este uso

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. 
    } 

:

echo clean('a|"[email protected]£de^&$f g'); 

seria: abcdef-g

fuente: https://stackoverflow.com/a/14114419/2439715

0

Todos asnwers anteriores se ocupan de URL, pero en caso de que alguien tendrá que desinfectar cadena de inicio de sesión (por ejemplo) y lo guarda como texto, aquí es usted va:

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