2012-09-04 41 views
2
<? 
$xm="1?x=1"; 
if($_GET["x"]=="1" || $_GET["x"]=='$xm'){ ?> 
String Works 
<? } ?> 

基本上读取网址:我该如何编写这个PHP字符串,它内部有一个等号?

http://site.com/shop/category/product?x=1?x=1 

当表单提交会发生这种情况。我没有访问它更改为:

http://site.com/shop/category/product?x=1&x2=1 
+0

使用Preg_Replace - 一个字符串中不能有等号。文字或数字。 BONKERS。 – M1th

+2

改为使用'http_build_query()'。 http://php.net/manual/en/function.http-build-query.php – Brad

+0

要更改URI,您必须启动重定向命令。看一下http://es.php.net/manual/en/function.header.php – Lobo

回答

1

将其更改为:

<? 
$xm="1?x=1"; 
if($_GET["x"]=="1" || $_GET["x"]=="{$xm}"){ ?> 
String Works 
<? } ?> 
-2

使用http_build_query,每当你想建立联系

+0

我今天有同样的问题! – amitchhajer

+0

OP想要拆分该网址,以便重建。你在谈论如何画一面墙,而OP正在问如何建造墙壁。 –

0

你有什么应该工作,以改变该'$xm'将不计算"1?x=1"

if (isset($_GET['x']) && ($_GET['x'] == 1 || $_GET['x'] == $xm)) { 
    echo 'string works'; 
} 

如果参数始终为数字,那么也可以在比较之前写入以将$_GET['x']转换为整数:

if (isset($_GET['x']) && $_GET['x'] == 1) { 
    echo 'string works'; 
} 

这是可行的,因为'1?x=1' == 1,但'1?x=2' == 1 ......如果这不是所需的行为,请告诉我。

-2

等号在URL上下文的特殊含义。他们需要被编码为像对待文本值或者与urnencode()或rawurlencode()或Base64编码

+0

这不是问题所在。 –

1

如果URL看起来像...product?x=1?x=1,该$_GET阵列将是这样的:

array(1) { 
    ["x"] => string(5) "1?x=1" 
} 

所以你的条件只需要看起来像:

if ($_GET["x"] == '1?x=1') 

你的问题很简单,就是你引用变量$xm在单引号,字面导致字符串“$ XM”。

现在显然,这是一个相当破碎的URL。如果您不知道?x=1会在其中出现多少次,那么很难与任何常数进行比较。

相关问题