2009-11-23 18 views
0

我正在处理单个入口网站中的两个问号。如何处理php单个入口网站中的url问号

我想使用urlencode来处理它。 的原始网址:

'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和我在那里也可以使用它。

你有什么建议吗?

+0

是的,当然,这就是它生成的:'http://xxx.com/?query = abc&search = 1' – 2009-11-23 14:16:34

+0

hm,意外的结果。 'index.php?page ='和''search?query =''字符串部分? – pingw33n 2009-11-23 14:36:43

回答

1

为什么不把它改写成为如果使用[QSA(查询字符串追加)标志

index.php?page=search&query=... 

的mod_rewrite会为你做这个。

http://wiki.apache.org/httpd/RewriteQueryString

+0

是什么让你觉得mod \ _rewrite可以解决这个问题? – Gumbo 2009-11-23 14:07:28

+0

它没有解决具体的问题,但是将两个查询字符串合并为一个是简单的重写,它可以完全避免整个问题,并且不需要手动解析第二个查询字符串。 – 2009-11-23 15:22:14

+0

如果他在IIS或其他非Apache服务器上运行,会发生什么情况? – ChronoFish 2009-11-23 15:30:45

0

$_SERVER['QUERY_STRING']会给你一切后的第一个 “?”在一个URL中。

从这里你可以解析使用“爆炸”或常见的刺痛功能。

实施例:

http://xxx/info.php?test=1?test=2&test=3 

$ _SERVER [ 'QUERY_STRING'] =>测试= 1测试= 2 &测试= 3

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

$ localURL> '测试= 1'

$ remoretURL> '测试= 2 &测试= 3'

希望这有助于

0

我建议你改变服务器代码的逻辑来处理更简单的查询表单。这样可能会在不久的将来导致你无处可去。

使用

index.php?page=search&query=... 

为您的查询格式,但不与mod_rewrite的你的第一个覆盖它想要的格式只是为了满足当前的应用程序逻辑,但在服务器端的一些更好的逻辑处理。编写一些ifs和thens,开关和案例......但不要试图将应用程序的逻辑放到你的URL中。它会让你非常尴尬的网址,很快你就会看到该层没有足够的空间来处理你所需要的所有逻辑。 :)