2011-03-09 28 views
0

想象一下我想要轉換爲小寫字母的原始URL,將所有空格替換爲破折號-,並且所有逗號都不會被替換。目前我有這個:urlencode:如何刪除逗號等特定字符?

$pageurle = str_replace(' ', '-', $pagename); 
$pageurle = strtolower($pageurle); 
$pageurle = urlencode($pageurle); 

哪些工作,但不會刪除逗號。當我補充一點:

$pageurle = str_replace(',', '', $pagename); 

然後我得到逗號刪除,但所有的破折號成爲+ ???我該如何解決這個問題?

一般來說我會很高興有字符的列表,像-@&--或其他的東西,我會很高興從我的漂亮的網址手動刪除。

回答

4

這裏的問題是,您提到兩次$pagename。如果您想進行進一步更換,您應該參考$pageurle。否則,您的第一個替換將被覆蓋。 -不會被替換爲+,而是來自原始$pagename的空格。

請注意,str_replace()也可以採取數組。所以,你應該能夠放置一個你想要替換的實體列表,以及一個替換列表,並且調用str_replace(),並且一次性完成它。見http://php.net/manual/en/function.str-replace.php

$search=array(' ', '--'); 
$replace=array('-', 'somethingelse'); 

$pageurle=urlencode(str_replace($search, $replace, $pagename)); 
2

你真的不應該試圖讓所有的禁人物的名單,雖然 - 特別是如果這是進入一個網址:

$pageurle = iconv('UTF-8', 'ASCII//TRANSLIT', $pagename); 
$pageurle = preg_replace("/[^a-zA-Z0-9\/_| -]/", '', $pageurle); 
$pageurle = strtolower(trim($pageurle, '-')); 
$pageurle = preg_replace("/[\/_| -]+/", '-', $pageurle); 

以上應徹底清理你的字符串,使其友好的網址,同時保持外國字符(IE轉換「Ñ」到「N」)。

+0

似乎工作,一旦你用$ pageurle替換$ clean。依賴於iconv模塊,這在我的發行版(Arch)上默認不啓用。 – 2014-03-26 21:34:48

2
function slugify($text) 
{ 
    // we don't want "amp" and similar in our urls 
    $text = htmlspecialchars_decode($text, ENT_QUOTES); 

    // replace non letter or digits by - 
    $text = preg_replace('~[^\\pL\d]+~u', '-', $text); 

    // trim 
    $text = trim($text, '-'); 

    // transliterate 
    $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); 

    // lowercase 
    $text = strtolower($text); 

    // remove unwanted characters 
    $text = preg_replace('~[^-\w]+~', '', $text); 

    if (empty($text)) 
    { 
    return 'n-a'; 
    } 

    return $text; 
} 

有時iconv不按預期方式工作。如果是這樣的話,設置一個區域設置應該修復:

setlocale(LC_ALL, 'en_US.utf8');