2014-02-08 107 views
1

好了,我有一個的preg_replace聲明替換URL字符串。 第一和第二可變的工作,但我需要幫助第二串子....PHP的preg_replace URL字符串

$html = str_replace('index.php','index',$html); 
$html = preg_replace('/index\?cat=([a-z0-9]+)/i','index/$1',$html); 
$html = preg_replace('/index\?cat=([a-z0-9]+)/&sub=([a-z0-9]+)/i','index/$1/$2',$html); 
+0

你的意思是你需要與第三方幫助嗎?嘗試在&sub& – Nihat

+0

處轉義&符號可能在'&sub'之前刪除'/'。另外,做更具體的替代_first_,不太具體的_later_。如果這沒有幫助,請指定輸入和期望的輸出。還要注意,通過正確的錯誤報告,PHP已經告訴你它出了什麼問題。 – Wrikken

+0

退出/爲\ /像Wrikken提到 – Nihat

回答

1

假設$html包含:

index.php?cat=123&sub=456 

str_replace $ HTML變爲:

index?cat=123&sub=456 

:第一的preg_replace後10

然後第二個preg_replace不匹配。

你最好修改的preg_replace的順序:

//$html -> index.php?cat=123&sub=456 
$html = str_replace('index.php','index',$html); 
//$html -> index?cat=123&sub=456 
$html = preg_replace('/index\?cat=([a-z0-9]+)&sub=([a-z0-9]+)/i','index/$1/$2',$html); 
//$html -> index/123/456 
$html = preg_replace('/index\?cat=([a-z0-9]+)/i','index/$1',$html); 
//$html -> index/123/456