2010-04-05 11 views
6

Duplicar posibles:
URL Friendly Username in PHP?mejor manera de escapar y crear una babosa

im alguna manera confusa en el uso de las funciones propias de escapar y crear una babosa

i utilizado este:

$slug_title = mysql_real_escape_string()($mtitle); 

pero alguien me dijo que no usarlo y usar urlencode()

cuál es mejor para babosas y seguridad

que puedo ver en el SO, inserta - entre las palabras:

https://stackoverflow.com/questions/941270/validating-a-slug-in-django 
+0

Ver mi respuesta aquí http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string/10360316#10360316 –

Respuesta

11

El uso de MySQL o escape de URL no es el camino a seguir.

Here is an article que lo hace mejor:

function toSlug($string,$space="-") { 
    if (function_exists('iconv')) { 
     $string = @iconv('UTF-8', 'ASCII//TRANSLIT', $string); 
    } 
    $string = preg_replace("/[^a-zA-Z0-9 -]/", "", $string); 
    $string = strtolower($string); 
    $string = str_replace(" ", $space, $string); 
    return $string; 
} 

Esto también funciona correctamente para caracteres acentuados.

+0

problema es para los idiomas árabe y mb trabajo esta función suele y cambia todos los caracteres a - –

+2

Desafortunadamente iconv parece funcionar de forma incontestada en todas las plataformas: php -r 'print iconv ("UTF-8", "ASCII // TRANSLIT", "bär"). "\norte";' da 'barra' en Ubuntu (10.04) y 'b' ar 'en mi Mac. – tuomassalo

+3

Ah ... la independencia de la plataforma de PHP ... me encanta. – Thomas

2

mysql_real_escape_string() tiene un propósito diferente que urlencode() que no son apropiados para crear un slug.

Se supone que una babosa es claro & con significado frase que describe de manera concisa la página.

mysql_real_escape_string() escapa caracteres peligrosos que pueden cambiar el propósito de la cadena de consulta original.

urlencode() escapa caracteres de URL no válidos con "%" seguido de 2 dígitos hexadecimales que representan su código (por ejemplo,% 20 para espacio). De esta forma, la cadena resultante será no sea claro & significativo, debido a las desagradables secuencias de caracteres, p. Ej. http://www.domain.com/bad%20slug%20here%20%3C--

Por lo tanto, se deben omitir los caracteres que puedan verse afectados por urlencode(), excepto los espacios que generalmente se reemplazan por -.

Cuestiones relacionadas