php中的访问权限和文件路径

php中的访问权限和文件路径,php,path,permissions,Php,Path,Permissions,我使用index.php来控制页面的访问 机制如下: Index.php将页面重定向到search.php;代码:index.php/?page=search search.php的路径是:pages/search.php,search.php包括header.html、body.html等 现在,在body.html中,我们使用:index.php/?page=search参数调用search.php,body.html包含以下代码:index.php/?page=search?query='

我使用index.php来控制页面的访问

机制如下:

Index.php将页面重定向到search.php;代码:
index.php/?page=search
search.php的路径是:
pages/search.php
,search.php包括header.html、body.html等

现在,在body.html中,我们使用:
index.php/?page=search
参数调用search.php,body.html包含以下代码:
index.php/?page=search?query='。quote_replace(addmarks($query))。
您可以看到有两个“?”。就是这个问题

当我浏览search.php时,它会显示在url中:
example.com/?page=search

当我实际在body.html中单击search.php中的按钮时,它会显示在url
example.com/index.php/?query=&search=1

这样,浏览页面只显示index.php页面。但是我想在search.php中显示搜索结果,它应该显示
example.com/?page=search/?query=&search=1
。但是您可以看到
/?page=search
消失,并且
/index.php
出现在这里

对不起,情况很复杂,我不能很好地描述它。如果你不能很好地理解,我会解释的


那么,你对此有什么建议吗?非常感谢

如果要使用字符串(如
search/?query=&search=1
)作为URL参数,则需要进行编码,使其不再包含特殊字符,如
&
。为此,请使用以下命令:

urlencode("search/?query=findme&search=1")
这将生成以下字符串,可以安全地将其作为URL参数包含:

search%2F%3Fquery%3Dfindme%26search%3D1
要构建第一个字符串,需要对所有参数进行编码。在这里,该函数很有用,它获取一个包含键和值的数组,对所有键和值进行编码,并在需要时添加
=
&
字符:

http_build_query(array("query" => "find&me", "search" => "1"))
产生

query=find%26me&search=1

@维姆,你的建议太好了。我是否需要同时使用urlencode和http_build_查询?对不起,我以前从未用过。我现在完全不知道。你也可以在第二种情况下使用
urlencode
,自己构造查询字符串,但是
http\u build\u query
要简单得多。在任何情况下,您都需要对同一数据进行两组编码,因为它也会被解码两次(一次是读取page的值,另一次是读取query和search)。