Возможный дубликат:
URL Friendly Имя пользователя в PHP?
im каким-то образом запутался в использовании надлежащих функций для выхода и создания пули
Я использовал это:
$slug_title = mysql_real_escape_string()($mtitle);
но кто-то сказал мне не использовать его и использовать urlencode ()
который лучше для слизней и безопасности
как я вижу в SO, он вставляет – между словами:
https://stackoverflow.com/questions/941270/validating-a-slug-in-django
Использование MySQL или экранирование URL-адресов – это не путь.
Вот статья, которая делает это лучше:
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; }
Это также правильно работает для акцентированных символов.
mysql_real_escape_string () имеет другую цель, чем urlencode (), которая не подходит для создания пули.
Предполагается, что пуля должна быть четкой и содержательной фразой, которая кратко описывает страницу.
mysql_real_escape_string () запускает опасные символы, которые могут изменить цель исходной строки запроса.
urlencode () удаляет недопустимые URL-адреса с символом «%», за которым следуют две шестнадцатеричные цифры, которые представляют их код (например,% 20 для пробела). Таким образом, результирующая строка не будет ясна и значима из-за неприятных последовательностей символов, например http://www.domain.com/bad%20slug%20here%20%3C–
Таким образом, любые символы, которые могут быть затронуты urlencode (), должны быть опущены, за исключением пробелов, которые обычно заменяются на.