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;.+?;/', '', $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;
我有一个包含 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;.+?;/', '', $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;