2011-05-19 113 views
0
$flr = preg_replace("/\\\'/","%27",$flr); 

如果URL有此符号:它得到了由27%和URL更换应该成为http://localhost/%27 但是,这是行不通的。例如:PHP的preg_replace

$flr = preg_replace("/\\\"/","%22",$flr);

网址replacment的作品,我也得到http://localhost/%22

那么,为什么第一个例子不工作?

为了测试我使用:

function isValidFLR(&$flr) { 
    $flr = preg_replace("/\\\'/","%27",$flr); 
    $flr = preg_replace("/\\\"/","%22",$flr); 
    echo $flr; 
    die(); 
} 
+0

为什么不试试[rawurlencode](http://in3.php.net/manual/en/function.rawurlencode.php) – diEcho 2011-05-19 13:01:28

回答

0
$flr = preg_replace("/'/","%27",$flr); 

将工作

但是,正如其他人所说,一个的PHP函数,这可能是一个更好的解决方案。

1

是你问什么简单urlencode()

如果你只是想替换几个特定的​​字符,你应该尝试使用str_replace()来代替。

0

你遇到了PHP的字符串转义引号的问题,与正则表达式的转义混合在一起。你可能会得到一个非常混乱的反斜杠序列!

您的问题最直接的解决方法是对当你正在寻找双引号您正则表达式字符串中使用单引号:

$flr = preg_replace('/\\\"/',"%22",$flr); 

然而,在你的情况下,一个更简单的解决办法是什么乞求:为什么你需要在这种情况下使用正则表达式?一个简单的str_replace()也可以完成这项工作,并且会避免所有那些抬头的事物。

0

什么测试与以下几点:

$flr = preg_replace("/\\\"/","%27",$flr); 

(更换