6

可能重复:
PHP 中的 URL 友好用户名?

我在使用适当的功能来逃避和创造一个蛞蝓时不知何故感到困惑

我用这个:

$slug_title = mysql_real_escape_string()($mtitle);

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

哪个更适合蛞蝓和安全性

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

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

2 回答 2

12

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

这也适用于重音字符。

于 2010-04-05T19:26:55.463 回答
2

mysql_real_escape_string() 与 urlencode() 具有不同的目的,两者都不适合创建 slug。

slug 应该是一个清晰而有意义的短语,可以简洁地描述页面。

mysql_real_escape_string() 转义可能改变原始查询字符串用途的危险字符。

urlencode() 用“%”转义无效的 URL 字符,后跟 2 个十六进制数字,表示它们的代码(例如,%20 表示空格)。这样,由于不愉快的字符序列,生成的字符串将清晰和有意义,例如http://www.domain.com/bad%20slug%20here%20%3C--

因此,任何可能受 urlencode() 影响的字符都应该被省略,除了通常用 . 替换的空格-

于 2010-04-05T19:40:51.140 回答