2010-04-05 5 views
6

Possible en double:
URL Friendly Username in PHP?meilleure façon d'échapper et de créer une limace

im confus en quelque sorte dans l'utilisation des fonctions propres à échapper et à créer une limace

i utilisé ceci:

$slug_title = mysql_real_escape_string()($mtitle); 

mais quelqu'un m'a dit de ne pas l'utiliser et utiliser urlencode()

qui est mieux pour les limaces et la sécurité

que je peux voir dans SO, il insère - entre les mots:

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

Voir ma réponse ici http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string/10360316#10360316 –

Répondre

11

Utiliser MySQL ou l'échappement d'URL n'est pas la solution.

Here is an article qui fait mieux:

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

Cela fonctionne aussi correctement pour les caractères accentués.

+0

problème est pour les langues arabe et mb cette fonction wont travail et change tous les caractères en - –

+2

Malheureusement, iconv semble fonctionner de manière incohérente sur toutes les plateformes: php -r 'print iconv ("UTF-8", "ASCII // TRANSLIT", "bär"). "\ n"; ' donne 'barre' sur Ubuntu (10.04) et 'b' ar 'sur mon Mac – tuomassalo

+3

Ah ... l'indépendance de la plate-forme de PHP ... je dois l'aimer – Thomas

2

mysql_real_escape_string() a un but différent de celui d'urlencode() qui ne sont pas appropriés pour créer un slug.

Un slug est supposé être un clear & phrase significative qui décrit de manière concise la page. Mysql_real_escape_string() échappe les caractères dangereux qui peuvent changer le but de la chaîne de requête d'origine. Urlencode() échappe les caractères d'URL invalides avec "%" suivi de 2 chiffres hexadécimaux qui représentent leur code (par exemple% 20 pour l'espace). De cette manière, la chaîne résultante et non sera effacer & significatif, en raison des séquences de caractères désagréables, par ex. http://www.domain.com/bad%20slug%20here%20%3C--

Ainsi, tous les caractères pouvant être affectés par urlencode() doivent être omis, à l'exception des espaces qui sont généralement remplacés par -.

Questions connexes