2011-06-22 77 views
2

我有如下代碼來創建無特殊字符的字符串,並設有獨立的 - 因爲它使用的URLPHP regural EXP刪除特殊字符

$txt = preg_replace("/[^a-z0-9\s-]/", "", $txt); 
$txt = trim(preg_replace("/[\s-]+/", " ", $txt)); 
$txt = trim(mb_substr($txt, 0, 1024)); 
$txt = preg_replace("/\s/", "-", $txt); 

其工作正常,到目前爲止,但今天當遷移形式其他數據庫我發現一些失敗。

當TXT具有(1/2)上標失敗

當TXT具有符號像度(溫度),®(版權)™(商標)失敗

當TXT有......也沒有(這是最奇怪的bucause如果有1個點的工作)

誰能幫助請

感謝

+1

的三個點很可能不是三個點,但省略號:http://en.wikipedia.org/wiki/Ellipsis –

+1

這由於輸入的編碼,很可能是一個問題。它在什麼編碼? – Jon

+0

它如何失敗? – alex

回答

-2

我不知道你正在嘗試做b UT

str_replace($string,$txt); 

應該工作

+3

這只是錯誤的。 (a)邏輯上:必須刪除*'$ txt'中的字符*。 (b)在句法上:您不指定主題(在哪裏搜索替換)。 –

+1

或者像這樣說:'str_replace'需要3個參數,你只指定了兩個參數,並且不清楚它們應該是三個參數中的哪一個。 –

+0

yup語法是錯誤的,它是給你一個想法,但你試圖用yy替換xx。 – X10nD

0

試試這個:

function friendlyURL($string){ 
     $string = preg_replace("`\[.*\]`U","",$string); 
     $string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$string); 
     $string = htmlentities($string, ENT_COMPAT, 'utf-8'); 
     $string = preg_replace("`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i","\\1", $string); 
     $string = preg_replace(array("`[^a-z0-9]`i","`[-]+`") , "-", $string); 
     return strtolower(trim($string, '-')); 
    } 

$myFriendlyURL = friendlyURL("Barca rejects FIFA statement © on Olympics row ®"); 
echo $myFriendlyURL; // will echo barca-rejects-fifa-statement-on-olympics-row