我在某种程度上混淆了使用适当的函数来逃避和创建一个slu
我用过这个:
$slug_title = mysql_real_escape_string()($mtitle);
但有人告诉我不要使用它并使用urlencode()
哪一个更适合slu and和安全
正如我在SO中看到的,它插入 - 在单词之间:
https://stackoverflow.com/questions/941270/validating-a-slug-in-django
答案 0 :(得分:12)
使用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;
}
这也适用于重音字符。
答案 1 :(得分:2)
mysql_real_escape_string()与urlencode()的目的不同,它们都不适合创建一个slug。
一个slug应该是一个 clear&简明扼要地描述页面的有意义的短语。
mysql_real_escape_string()转义可以改变原始查询字符串用途的危险字符。
urlencode()转义无效的网址字符,其中“%”后跟2个代表其代码的十六进制数字(例如,%20代表空格)。这样,结果字符串将不 清除&有意义的,因为令人不快的字符序列,例如http://www.domain.com/bad%20slug%20here%20%3C--
因此,除了通常用-
替换的空格外,任何可能受urlencode()影响的字符都应该省略。