PHP的preg_replace returns用空格替换下划线时为null

PHP's preg_replace returns null when replacing underscores with white spaces

我有一个包含 hyperlink 的网页,如下所示:

$name = "Hello World";
echo "<a href='page.php?name='". preg_replace(" ", "_", $name) "'> bla bla </a>"

这会成功生成以下 link:

...page.php?name=Hello_World

在我的page.php我尝试反转操作:

if($_SERVER[REQUEST_METHOD] == "GET"){
$name = $_GET['name'];
//testing if the problem is with GET
echo $name;
//now here's the problem:
$string = preg_replace("_", " ", $name);
echo $string;
}

$name 正确回显,但 $string 始终为空 我已经尝试了所有可能的组合,如 ~~ 和 // 和 [_] 和 \s 并直接使用 $_GET ,如:

preg_replace("_", " ", $_GET['name']);

none 他们成功了。 这个问题困扰了我一天的大部分时间。 感谢任何帮助。

preg_replace 接受一个正则表达式作为它的第一个参数。 " ""_" 都不是有效的正则表达式。

在这种情况下,您可以使用 str_replace

您可以创建类似 sefurl 的函数

    function makesefurl($url=''){
$s=trim($url);
 $tr = array('ş','Ş','ı','I','İ','ğ','Ğ','ü','Ü','ö','Ö','Ç','ç','(',')','/',':',',');

 $eng = array('s','s','i','i','i','g','g','u','u','o','o','c','c','','','-','-','');

 $s = str_replace($tr,$eng,$s);



 $s = preg_replace('/&amp;amp;amp;amp;amp;amp;amp;amp;amp;.+?;/', '', $s);

 $s = preg_replace('/\s+/', '-', $s);

 $s = preg_replace('|-+|', '-', $s);

 $s = preg_replace('/#/', '', $s);

 $s = str_replace('.', '.', $s);

 $s = trim($s, '-');

 $s = htmlspecialchars(strip_tags(urldecode(addslashes(stripslashes(stripslashes(trim(htmlspecialchars_decode($s))))))));
    }
    echo "<a href='page.php?name='". makesefurl($name) "'> bla bla </a>";

并且您可以将其转换为之前的 makesefurl 函数,您需要创建另一个函数,如解码器或编码器 html 命令

@Halcyon 指出 preg_replace 语法不正确,以下是正确的:

$string = preg_replace('/_/', ' ', $name);

但是对于这样一个简单的 find/replace 你可以使用 str_replace 来代替:

$string = str_replace("_", " ", $name);
echo $string;