php单入口网站url中问号的处理

php单入口网站url中问号的处理,php,url,url-encoding,Php,Url,Url Encoding,我在一个单一入口网站中处理两个问号 我正在尝试使用urlencode来处理它。 原始URL: 'search.php?query='.quote_replace(addmarks($search_results['did_you_mean'])).'&search=1' 我想在单一入口网站中使用它: 'index.php?page='.urlencode('search?query='.quote_replace(addmarks($search_results['did_you_me

我在一个单一入口网站中处理两个问号

我正在尝试使用urlencode来处理它。 原始URL:

'search.php?query='.quote_replace(addmarks($search_results['did_you_mean'])).'&search=1'
我想在单一入口网站中使用它:

'index.php?page='.urlencode('search?query='.quote_replace(addmarks($search_results['did_you_mean'])).'&search=1')

它不起作用,我不知道我是否必须使用
urldecode
以及在哪里可以使用它。

为什么不把它重写成

index.php?page=search&query=...
如果您使用[QSA](查询字符串附加)标志,mod_rewrite将为您完成此操作


$\u服务器['QUERY\u STRING']
将为您提供URL中第一个“?”之后的所有内容

从这里,您可以使用“explode”或公共sting函数进行解析

例如:

http://xxx/info.php?test=1?test=2&test=3
$\u服务器['QUERY\u STRING']=>test=1?test=2&test=3

list($localURL, $remoteURL) = explode("?", $_SERVER['QUERY_STRING']);
$localURL=>'test=1'

$remoretURL=>'test=2&test=3'


希望这有帮助,我建议您更改服务器代码的逻辑,以处理更简单的查询表单。这样的话,在不久的将来,它很可能会把你们引向绝路

使用


作为您的查询格式,但不要使用mod_rewrite将其改写为您的第一个想要的格式,只是为了满足您当前的应用程序逻辑,而是在服务器端使用一些更好的逻辑来处理它。写一些如果,然后,开关和案例。。。但不要试图将应用程序的逻辑放入URL中。这将使您的URL变得非常笨拙,很快您就会发现该层中没有足够的空间来处理您需要的所有逻辑。:)

是的,当然,这是它生成的:
http://xxx.com/?query=abc&search=1
hm,意外结果。哪里是
index.php?page=
'search?query='
字符串部分?这并不能解决这个特定的问题,但是将两个查询字符串合并成一个字符串是一个简单的重写,可以完全避免整个问题,让他不必手动解析第二个查询字符串。如果他在IIS或其他非apache服务器上运行,会发生什么?@Ilia:IIS的问题是修辞性的。mod_rewrite在很多方面都很好(比如干净的URL)。但是代码不应该依赖于它,并且应该在没有mod_重写的情况下正常工作。我的问题的重点是鼓励采用独立于服务器的解决方案。这是一个干净的URL问题。在index.php?page=search&query=test和index.php?page=search.php?query=test之间,您认为在外观和内部处理方面哪一个更好?我不同意。细微的区别在于,为了美观起见,将第一个“?”和随后的“&”转换为“/”是一个干净的URL问题。如果编写正确,它将生成以下内容:index.php/page/search.php?query=test/。。。。Search.php?query=test是原始数据,不是实际的页面请求。事实上,它看起来像一个URL是偶然的。Apache和Mod_rewrite应该不处理数据。请注意,我并不是说它不起作用。我只是认为mod_rewrite是嵌入应用程序逻辑的错误地方。
index.php?page=search&query=...