2010-04-05 13 views
6

Mögliche Duplizieren zu entkommen und zu erstellen:
URL Friendly Username in PHP?beste Weg, einen Butzen

im irgendwie verwechselt sich mit der richtigen Funktionen einen Butzen

i benutzten zu entkommen und zu erstellen:

$slug_title = mysql_real_escape_string()($mtitle); 

aber jemand hat mir gesagt, es nicht zu benutzen und verwenden urlencode()

, die man besser für Schnecken und Sicherheit

, wie ich in SO sehen können, fügt sie - zwischen den Wörtern:

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

Meine Antwort hier http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string/10360316#10360316 –

Antwort

11

Die Verwendung von MySQL oder URL-Escaping ist nicht der richtige Weg.

Here is an article, das macht es besser:

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

Dies auch richtig für akzentuierte Zeichen funktioniert.

+0

Problem ist für arabische und mb Sprachen dieser Funktion wird nicht funktionieren und ändert alle Zeichen in - –

+2

Leider funktioniert iconv scheinbar plattformunabhängig: php -r 'print iconv ("UTF-8", "ASCII // TRANSLIT", "Bär"). "\ n"; " gibt "bar" auf Ubuntu (10.04) und "b" ar 'auf meinem Mac. – tuomassalo

+3

Ah ... PHP-Plattform Unabhängigkeit ... muss es lieben. – Thomas

2

mysql_real_escape_string() hat einen anderen Zweck als urlencode(), die beide nicht zum Erstellen eines Slugs geeignet sind.

Ein Slug soll ein klar & sinnvolle Phrase sein, die prägnant die Seite beschreibt.

mysql_real_escape_string() entkommt gefährliche Zeichen, die den Zweck der ursprünglichen Abfragezeichenfolge ändern können.

urlencode() gibt ungültige URL-Zeichen mit "%" zurück, gefolgt von 2 Hexadezimalziffern, die ihren Code darstellen (z. B.% 20 für Leerzeichen). Auf diese Weise wird die resultierende Zeichenkette nichtklar & aussagekräftig sein, wegen der unangenehmen Zeichenfolgen, z.B. http://www.domain.com/bad%20slug%20here%20%3C--

Daher sollten alle Zeichen, die von urlencode() betroffen sein können, weggelassen werden, außer für Leerzeichen, die normalerweise durch - ersetzt werden.