2014-04-09 130 views
0

此函數旨在清理給定的值,但是它會輸出「n-a」,就好像沒有指定值一樣。它必須是最簡單的問題,但是現在這個問題讓我感到沮喪。爲什麼我的PHP函數沒有返回值?

function slug($text){ 

    // replace non letter or digits by - 
    $text = preg_replace('~[^pLd]+~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; 
} 

我很感激一些輸入。

+2

** **哪裏它變空?您是否嘗試過傾銷變量? (在替換之後,在修剪之後,在strtolower之後,在第二次替換之後) – h2ooooooo

+0

'$ text = preg_replace('〜[^ - w] +〜','',$ text);''這除了'-'和' w'。我認爲你的字符串沒有'-'或'w'。所以你得到空字符串。嘗試在這裏重寫正則表達式 – krishna

回答

1
  1. 嘗試使用mb_string庫而不是iconv。它是一個更好的庫。
  2. 在每個實例中,嘗試使用var_dump或echo來確保數據的返回。
2

你需要改變這似乎是不正確的正則表達式第一,應該是,

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

Working Demo.

+1

我認爲他的意思是'\ pL \ d'(aka。unicode letter/digit)。 – h2ooooooo

+0

@ h2ooooooo - 同意。 – Rikesh

+0

@ h2ooooooo - 添加反斜槓解決了我的問題,即第一個正則表達式爲\ pL \ d,第二個正則表達式爲\ w – TimD