IM使用正確的函數逃脫,並創建一個塞
我用這個莫名其妙困惑:
$slug_title = mysql_real_escape_string()($mtitle);
但有人告訴我,不要使用它,並用urlencode()來
哪一個是蛞蝓和安全
,我可以在SO看到更好的,它插入 - 詞之間:
https://stackoverflow.com/questions/941270/validating-a-slug-in-django
IM使用正確的函數逃脫,並創建一個塞
我用這個莫名其妙困惑:
$slug_title = mysql_real_escape_string()($mtitle);
但有人告訴我,不要使用它,並用urlencode()來
哪一個是蛞蝓和安全
,我可以在SO看到更好的,它插入 - 詞之間:
https://stackoverflow.com/questions/941270/validating-a-slug-in-django
使用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;
}
這也可以正確處理重音字符。
問題是阿拉伯語和MB語言此功能無法正常工作並將所有字符更改爲 - – 2010-04-05 20:05:12
不幸的iconv似乎跨平臺工作不一致:php -r'print iconv(「UTF-8」,「ASCII // TRANSLIT」,「bär」)。 「\ n」;」在Ubuntu(10.04)和'b'ar'在我的Mac上給'bar' – tuomassalo 2010-11-26 06:27:02
啊... PHP的平臺獨立性...得愛它 – Thomas 2010-11-27 21:11:15
mysql_real_escape_string()與urlencode()的用途不同,它們都不適合創建slu。。
一個slu is應該是一個明確&有意義的短語,簡潔地描述該頁面。
mysql_real_escape_string()轉義危險字符,可以改變原始查詢字符串的用途。
urlencode()使用「%」和2個代表它們的代碼的十六進制數字(例如空格爲%20)來轉義無效的URL字符。通過這種方式,由於不愉快的字符序列,例如,由此產生的字符串而不是是明確&有意義的。 http://www.domain.com/bad%20slug%20here%20%3C--
因此,除了通常用-
替換的空格外,任何可能受urlencode()影響的字符均應省略。
查看我的答案在這裏 http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string/10360316#10360316 – 2012-04-28 03:35:53