2013-01-17 28 views
2

可能重复:
URL Friendly Username in PHP?制作琴弦“网址安全”

有没有一种方法,使字符串“网址安全”,这意味着用连字符代替空格,删除任何标点符号和变化所有的大写字母都是小写的?

例如:

"This is a STRING" -› "this-is-a-string" 

"Hello World!" –› "hello-world" 
+1

当然 - 用哪种语言? –

+0

什么是最简单的方法? (我更喜欢PHP到JavaScript。) – user1706680

+0

是的,那里肯定是。 [你有什么尝试?](http://whathaveyoutried.com) – 2013-01-17 11:26:44

回答

7

您可以使用preg_replace取代改变这些字符。

$safe = preg_replace('/^-+|-+$/', '', strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', $string))); 
+0

当字符串以特殊字符结尾时,是否有简单的方法来摆脱最后一个连字符? – user1706680

+0

@ user1706680是的。我编辑了答案以摆脱标题和尾部连字符。 – kmkaplan

2

我经常使用这个功能来生成我的干净的网址,似乎做工精细, 你可以根据自己的需要改变,但给它一试。

function sanitize($string, $force_lowercase = true, $anal = false) { 
    $strip = array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "=", "+", "[", "{", "]", 
        "}", "\\", "|", ";", ":", "\"", "'", "‘", "’", "“", "”", "–", "—", 
        "—", "–", ",", "<", ".", ">", "/", "?"); 
    $clean = trim(str_replace($strip, "", strip_tags($string))); 
    $clean = preg_replace('/\s+/', "-", $clean); 
    $clean = ($anal) ? preg_replace("/[^a-zA-Z0-9]/", "", $clean) : $clean ; 
    return ($force_lowercase) ? 
     (function_exists('mb_strtolower')) ? 
      mb_strtolower($clean, 'UTF-8') : 
      strtolower($clean) : 
     $clean; 
}