最好的方法来逃脱并创造一个slu ..

时间:2010-04-05 19:22:45

标签: php slug

  

可能重复:
  URL Friendly Username in PHP?

我在某种程度上混淆了使用适当的函数来逃避和创建一个slu

我用过这个:

$slug_title = mysql_real_escape_string()($mtitle);

但有人告诉我不要使用它并使用urlencode()

哪一个更适合slu and和安全

正如我在SO中看到的,它插入 - 在单词之间:

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

2 个答案:

答案 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()影响的字符都应该省略。