2010-04-05 2 views
6

Можно создать дубликат:
URL Friendly Username in PHP?лучший способ избежать и создать слизняка

им как-то путается в использовании собственных функций, чтобы избежать и создать слизняка

я использовал это:

$slug_title = mysql_real_escape_string()($mtitle); 

, но кто-то сказал мне, чтобы не использовать его и использовать UrlEncode()

который один лучше для слизней и безопасности

, как я могу видеть в SO, он вставляет - между словами:

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

Посмотреть мой ответ здесь http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string/10360316#10360316 –

ответ

11

Использование MySQL или экранирование URL-адресов - это не путь.

Here is an article, что делает это лучше:

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

Это также работает правильно для акцентированных символов.

+0

проблема для арабских и мб языков эта функция не будет работать и изменяет все символы на - –

+2

К сожалению, iconv, похоже, неудобно работает на разных платформах: php -r 'print iconv («UTF-8», «ASCII // TRANSLIT», «bär»). "\ П";» дает «бар» на Ubuntu (10.04) и «b» ar на моем Mac. – tuomassalo

+3

А ... Независимость платформы PHP ... нужно любить. – Thomas

2

mysql_real_escape_string() имеет другую цель, чем urlencode(), которые оба не подходят для создания пули.

Пустой должен быть ясно & значащий фраза, которая кратко описывает страницу.

mysql_real_escape_string() экранирует опасные символы, которые могут изменить цель исходной строки запроса.

urlencode() выводит недопустимые URL-адреса с символом «%», за которым следуют две шестнадцатеричные цифры, которые представляют собой их код (например,% 20 для пробела). Таким образом, полученная строка будет не be clear & Значение, из-за последовательности неприятных символов, например. http://www.domain.com/bad%20slug%20here%20%3C--

Таким образом, любые символы, которые могут быть затронуты urlencode(), должны быть опущены, за исключением пробелов, которые обычно заменяются на -.

Смежные вопросы