当使用空格替换下划线时,PHP的preg_replace返回null

时间:2015-04-25 17:54:36

标签: php html http get preg-replace

我的网页包含如下超链接:

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

这会成功生成以下链接:

...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始终为null 我已经尝试了所有可能的组合,如〜〜和/ /和[_]以及\ s,并直接使用$ _GET:

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

他们都没有奏效。 这个问题在我的大部分时间都在燃烧。 任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

但是对于这样一个简单的查找/替换,您可以使用str_replace代替:

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

答案 2 :(得分:-2)

你可以创建像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函数之前所有你需要创建另一个functin,如解码器或编码器html命令