2014-01-08 131 views
0

我試圖生成正確的名稱正確的鏈接正確的鏈接...生成從名稱

例如:牛逼&Ĵ汽車目前爲/TJ-汽車

但產生的,因爲我需要根據名稱進行查找,所以在嘗試轉換回名稱時,我無法進行查找。

所以......我已經將他們照顧「到_,這對於像邁克的店名的偉大工程(轉換爲mike_s店),但現在我面臨的&

這裏是我目前的功能:

// Fix the name for a SEO friendly URL 
function FixNameForLink($str){ 
    // Swap out Non "Letters" with a - 
    $text = preg_replace('/[^\\pL\d\']+/u', '-', $str); 
    // Trim out extra -'s 
    $text = trim($text, '-'); 
    // Convert letters that we have left to the closest ASCII representation 
    $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); 
    // Make text lowercase 
    $text = strtolower($text); 
    // ' has been valid until now... swap it for an _ 
    $text = str_replace('\'', '_', $text); 
    // & has been valid until now... swap it for an . 
    $text = str_replace('&', '.', $text); 
    // Strip out anything we haven't been able to convert 
    $text = preg_replace('/[^-_\w]+/', '', $text); 
    return $text; 
} 

請注意,&替代不會發生。我怎樣才能確保傳遞給這個函數的任何字符串都會用_替代,並用012替代。

+1

你的代碼中包含的操作,一般是不可逆的,因此無法得到原始輸入從固定名稱開始。你在這方面走錯了路。如果你需要原始輸入然後保存它。 – Jon

+0

請重新閱讀我需要的內容...這是在問題中。我瞭解你的顧慮,但我的需求與他們不同。 – Kevin

+0

您寫下「我試圖轉換回名稱時無法進行查找」。我的意思是說你不能*在一般情況下轉換回名字,因爲你正在做一些事情,比如不加區分地用短劃線替換字符。當你的需求與現實相沖突時,現實總會獲勝。 – Jon

回答

0

修正:

// Fix the name for a SEO friendly URL 
function FixNameForLink($str){ 
    // Swap out Non "Letters" with a - 
    $text = preg_replace('/[^\\pL\d\'&]+/u', '-', $str); // needed to allow the & 
    // Trim out extra -'s 
    $text = trim($text, '-'); 
    // Convert letters that we have left to the closest ASCII representation 
    $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); 
    // Make text lowercase 
    $text = strtolower($text); 
    // ' has been valid until now... swap it for an _ 
    $text = str_replace('\'', '_', $text); 
    // & has been valid until now... swap it for an . 
    $text = str_replace('&', '.', $text); 
    // Strip out anything we haven't been able to convert 
    $text = preg_replace('/[^-_\.\w]+/', '', $text); // needed to make sure the replace . stays put 
    return $text; 
}