2011-02-02 49 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不会有关系。