2012-01-08 74 views
4

我想取一個字符串,將其除去所有非字母數字字符並將所有空格轉換爲破折號。如何將字符串轉換爲字母數字並將空格轉換爲破折號?

+1

[PHP /正則表達式: 「linkify」 博客標題]的可能重複(http://stackoverflow.com/questions/3244651/php-regex-linkify-blog-titles)的 – mario 2012-01-08 03:57:51

+0

可能的複製[php/regex:「linkify」博客標題](https://stackoverflow.com/questions/3244651/php-regex-linkify-blog-titles) – primpap 2017-09-13 22:05:54

回答

10

無論何時我想將標題或其他字符串轉換爲URL段落,我都會使用以下代碼。它通過使用RegEx將任何字符串轉換爲字母數字字符和連字符來完成您要求的所有功能。

function generateSlugFrom($string) 
{ 
    // Put any language specific filters here, 
    // like, for example, turning the Swedish letter "å" into "a" 

    // Remove any character that is not alphanumeric, white-space, or a hyphen 
    $string = preg_replace('/[^a-z0-9\s\-]/i', '', $string); 
    // Replace all spaces with hyphens 
    $string = preg_replace('/\s/', '-', $string); 
    // Replace multiple hyphens with a single hyphen 
    $string = preg_replace('/\-\-+/', '-', $string); 
    // Remove leading and trailing hyphens, and then lowercase the URL 
    $string = strtolower(trim($string, '-')); 

    return $string; 
} 

如果你要使用產生的URL蛞蝓的代碼,那麼你可能需要考慮增加一些額外的代碼後80個字符左右削減它。

if (strlen($string) > 80) { 
    $string = substr($string, 0, 80); 

    /** 
    * If there is a hyphen reasonably close to the end of the slug, 
    * cut the string right before the hyphen. 
    */ 
    if (strpos(substr($string, -20), '-') !== false) { 
     $string = substr($string, 0, strrpos($string, '-')); 
    } 
} 
+0

這非常好,謝謝分享你的代碼。幾乎正是我所期待的。 – Decoy 2012-01-08 09:07:40

11

啊,我以前用過這篇博文(對於url)。

代碼:

$string = preg_replace("/[^0-9a-zA-Z ]/m", "", $string); 
$string = preg_replace("/ /", "-", $string); 

$string將包含過濾文本。你可以迴應它或做任何你想要的東西。

+0

如果你喜歡這個答案,請點擊右邊的複選標記帖子。 – blake305 2012-01-08 03:57:49

+0

不應該先完成第二條線嗎?另外,你的第一個preg_replace語句結尾的那個「m」的目的究竟是什麼?謝謝 – Decoy 2012-01-08 04:14:54

+0

就像Decoy提到的那樣,第二行不會代替任何東西,因爲任何非字母數字字符已經被包含空格的第一行代替。 – Josh 2012-01-08 04:38:31

0
$string = preg_replace(array('/[^[:alnum:]]/', '/(\s+|\-{2,})/'), array('', '-'), $string); 
相關問題