我在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`
答案 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);