2011-02-02 50 views
2

我在d:/www/web12/index.php 中有一個index.php,裏面有一些錨標籤,php preg-replace url。

<a href="/docs/corn"> 
<a href="/docs/mais"> 

我想的preg_replace他們到

<a href="http://localhost/web12/directory/list=corn"> 
<a href="http://localhost/web12/directory/list=mais"> 

$url = preg_replace("/docs/", "'.$HTTP_SERVER_VARS['HTTP_HOST'].'/directory/list=", $url);// Can not use `$HTTP_SERVER_VARS['HTTP_HOST']` in `preg_replace` 

回答

1

的Preg使用/人的作爲identifyer

$url = preg_replace("/\/docs\//", $HTTP_SERVER_VARS['HTTP_HOST'].'/directory/list=', $url); 
+1

或幾乎任何符號作爲分隔符,而不僅僅是`/` – Wiseguy 2011-02-02 13:27:19

+0

是的,但隨着他的使用/作爲它的存在。和/是最常用的一個,並顯示如何使用php.net – Barkermn01 2011-02-02 13:28:04

0

你有單,雙引號的奇特組合。試試這個:

$url = preg_replace("/docs/", $HTTP_SERVER_VARS['HTTP_HOST'].'/directory/list=', $url); 
2

首先,$HTTP_SERVER_VARS已被替換 - 你應該使用$_SERVER代替。 ($HTTP_SERVER_VARS仍然有效,但可能會在未來版本的PHP中刪除)。

其次,你的報價痕顯得有點在你發佈的代碼奇怪 - 你有一個字符串,它看起來像這樣:

"'.$HTTP_SERVER_VARS['HTTP_HOST'].'/directory/list=" 

你的代碼不被嵌入在整個事件中雙引用,這意味着你認爲你在進行連接 - 即點 - 這些實際上是你的字符串的一部分。

這本身不會導致語法錯誤。它會破壞你的字符串替換,但代碼會運行。

它沒有的原因,你從它得到一個錯誤,是因爲$HTTP_SERVER_VARS['HTTP_HOST']是一個數組變量,並且數組變量不能嵌入字符串中,而不包含在大括號{}中。因此,即使你用$_SERVER['HTTP_HOST']或其他任何數組變量替換它,你仍然會得到同樣的錯誤。

要糾正這兩個問題,我們需要糾正您建立字符串的方式。有兩種解決方案,一種使用字符串連接,另一種使用花括號將變量嵌入到字符串中。我會選擇前一個選項,因爲它接近你的代碼試圖做的事情。

首先,刪除除了'HTTP_HOST'附近的所有引號(包括單引號和雙引號)。在開始時也刪除點。

現在,把雙引號或者單引號()只是這個字符串的固定部分 - 即'/directory/list='

最後,將$HTTP_SERVER_VARS更改爲$_SERVER

您應該結束了以下內容:

$_SERVER['HTTP_HOST']."/directory/list=" 

這應該工作。希望有所幫助。

最後一點,替代選項會已經結束了的代碼看起來像這樣:

"{$_SERVER['HTTP_HOST']}/directory/list=" 

...這嵌入使用{}裏面的字符串數組變量。但我會建議堅持使用其他方法,除非您對這種方式感到滿意。

另外順便說一句,我建議使用str_replace而不是preg_replace這個,因爲你沒有做任何實際上需要正則表達式的東西。再加上你的正則表達式因爲斜槓而被打破,這與str_replace不會有關係。