3

所以我试图从地址栏中获取一个如下所示的 url:

http://mysite.com/url.php?name=http://test.com/format.jsp?id=738ths3&secure=false

我正在使用 $_GET 变量从 URL 中读取它,我的代码如下

$arc = rawurlencode($_GET['name']);
echo "URL: $arc";

这只会返回

URL: http://imgur.com/format.jsp?id=738ths3

它缺少 &secure=false

我希望它看起来是什么:

 URL: http://test.com/format.jsp?id=738ths3&secure=false

我尝试了 urlencode,rawurlencode 无济于事,我在 google 中查看了许多论坛和 stackoverflow 没有答案帮助,有什么想法吗?谢谢!

urlencode 显示了这一点:

网址:http%3A%2F%2Ftest.com

所以我也不能吃!

4

3 回答 3

10

您需要urlencode()在构建 URL 之前,即:

$url = "http://mysite.com/url.php?name=".urlencode('http://test.com/format.jsp?id=738ths3&secure=false');

这样,您将能够name$_GET['name'].

解释:

在构造 URL 时没有urlencode()它,PHP 会将 is 视为 2 个单独的参数,由 分隔&

  1. $_GET['name']
    适合你的http://imgur.com/format.jsp?id=738ths3情况

  2. $_GET['secure']
    适合你的false情况

或者:

根据您的评论,您似乎无法控制 URL 构造。您可以使用以下$_GET方法在单个字符串中获取完整信息http_build_query

$name = http_build_query($_GET);

然后您将获得:

echo $name; // name=http://test.com/format.jsp?id=738ths3&secure=false

// which you would then may want to strip away the first 'name='
$name = substr($name, strlen('name='));

echo $name; // to obtain http://test.com/format.jsp?id=738ths3&secure=false
于 2012-07-28T04:40:29.850 回答
1

原始 URLhttp://mysite.com/url.php?name=http://test.com/format.jsp?id=738ths3&secure=false包含两个查询字符串参数:namesecure。查询字符串中的&属于完整URL,而不是name参数中的 URL。

如果您可以控制此值,则在声明链接/URL 时,使用 PHPurlencode()对全名值进行编码,例如:

$url = "http://mysite.com/url.php?name=" . urlencode("=http://test.com/format.jsp?id=738ths3&secure=false");

这将正确编码name参数,您$arc = $_GET['name'];将按需要工作。

如果您无法控制设置值并且只是解析您收到的内容,您可以在name=参数上拆分给定的字符串并假设它是一部分之后的所有其他内容name

$splitQuery = split('name=', $_SERVER['REQUEST_URI']);
$arc = $splitQuery[1];

要解码编码的 URL,在你访问它之后,使用 PHP 的urldecode()

$arc = urldecode($_GET['name']); // assuming you're properly encoding the `name` parameter
于 2012-07-28T04:44:23.893 回答
0

如果您无法对 URL 进行编码,则可以使用以下代码获取当前 URI:

$url = $_SERVER["REQUEST_URI"];

在您的情况下, $url 是:

/url.php?name=http://test.com/format.jsp?id=738ths3&secure=false

然后你可以用explode拆分它并验证它并从中获取GET参数。

于 2012-07-28T04:51:17.623 回答