php preg-replace url。

时间:2011-02-02 13:03:17

标签: php preg-replace

我在d:/www/web12/index.php中有一个index.php 其中有一些锚标记,例如

<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`

3 个答案:

答案 0 :(得分:2)

首先,$HTTP_SERVER_VARS已被替换 - 您应该使用$_SERVER代替。 ($HTTP_SERVER_VARS仍然有效,但可能会在将来的PHP版本中删除。)

其次,您发布的代码中的引号似乎有点奇怪 - 您有一个如下所示的字符串:

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

你的代码所做的是将整个内容嵌入双引号中,这意味着你认为你正在进行串联 - 即点 - 这些实际上是你字符串的一部分。

这本身不会导致语法错误。它会破坏你的字符串替换,但代码会运行。

它没有,并且你从中得到错误的原因是因为$HTTP_SERVER_VARS['HTTP_HOST']是一个数组变量,并且数组变量不能嵌入到字符串中而不将它们包装在{{1}中} 大括号。因此,使用当前代码,即使您将其替换为{}或任何其他数组变量,您仍会得到相同的错误。

要纠正这两个问题,我们需要纠正您构建字符串的方式。有两种解决方案,一种使用字符串连接,另一种使用$_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来说不是问题。

答案 1 :(得分:1)

Preg使用/作为标识符

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

答案 2 :(得分:0)

你有一个奇怪的单引号和双引号混合。试试这个:

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