当我在我的页面上使用* 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
答案 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放在正文中。