在查询字符串PHP上使用“http”时出错

时间:2011-09-11 13:41:25

标签: php query-string

当我在我的页面上使用* http:// * foo字符串时,我收到错误。

例如:

http://www.myadress.com/process.php?url=http://foo

当我剪切http://时,它有效。我该怎么做才能在查询字符串上使用http://

我使用这样的网址:

$address = @$_GET['url'];
$source = file_get_contents($url);
//bla bla

显示 404 错误。

编码没有变化。

始终重定向到404错误页面。但是当我删除http://时,它可以工作。我想知道是不是因为.htaccess文件?

这里是.htaccess代码(wordpress经典):

RewriteEngine Off
#test
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# Use PHP 5.3
Action application/x-hg-php53 /cgi-sys/php53
AddHandler application/x-hg-php53 .php 

5 个答案:

答案 0 :(得分:4)

与网址中的所有特殊字符一样,您必须encode

答案 1 :(得分:4)

根据其内容,您可能需要使用urlencode()

对其进行编码
$url = urlencode("http://foo");
echo "http://www.example.com/process.php?url=$url;

// prints 
http://www.example.com/process.php?url=http%3A%2F%2Ffoo

答案 2 :(得分:0)

您需要用%2F替换斜杠,如下所示:
http://www.myadress.com/process.php?url=http:%2F%2Ffoo
然后PHP会将其转换回http://
echo $_GET["url"]; // echos http://foo

答案 3 :(得分:0)

如果http似乎有问题,请尝试以下方法:

some.php?url=[s]something.com

然后使用php

$url = str_replace("[s]", "http://", $url);
$source = file_get_contents($url);

答案 4 :(得分:0)

出于安全原因,您的网络托管服务提供商HostGator会拒绝查询字符串包含http:/的请求。有关更多信息,请参阅this主题。要解决此问题,请使用部分URL,将URL放入哈希值,应用某种编码,或者将请求作为POST请求并将URL放在正文中。