当字符串变量中有URL时,如何在PHP中使用parse_url?

时间:2010-04-23 19:14:13

标签: php parsing url

我当然是一个PHP新手,所以我需要一些帮助。

我正在为我的网站创建一个自行设计的联盟计划,并可以选择联盟会员在其链接中添加子ID以进行跟踪。如果没有对输入的内容进行控制,我就会测试不同的场景,并在输入完整的URL时发现错误(即“http://example.com”)。

在我的PHP中我可以从字符串中获取变量没问题。我的问题来自于我获得引用URL并解析它(因为我需要解析引用URL以获取主机鬃毛用于其他用途)。代码如下:

$refURL = getenv("HTTP_REFERER");

$parseRefURL = parse_url($refURL);

当传入链接(例如)时工作:

http://example.com/?ref=REFERRER'S-ID&sid=www.test.com

传入链接时出现错误(注意在“sid =”之后添加“http://”):

http://example.com/?ref=REFERRER'S-ID&sid=http://www.test.com

以下是警告信息:

  

警告:parse_url(/?ref = REFERRER'S-ID& sid = http://www.test.com)[function.parse-url]:无法解析/home4/directory'/public_html/hosterdoodle/header.php中的网址在线28`

当有人决定将URL放在变量中时,有关如何防止parse-url函数被抛弃的任何想法? (我实际上测试了这个问题,它会在变量中以“:/”的形式抛出错误)

2 个答案:

答案 0 :(得分:4)

以下代码部分:

$url = "http://example.com/?ref=REFERRER'S-ID&sid=http://www.test.com";
$data = parse_url($url);
var_dump($data);

对我来说很好(PHP 5.3.2),并提供以下输出:

array
  'scheme' => string 'http' (length=4)
  'host' => string 'example.com' (length=11)
  'path' => string '/' (length=1)
  'query' => string 'ref=REFERRER'S-ID&sid=http://www.test.com' (length=41)


您确定要将完整的网址传递给parse_url吗?

如果我使用这部分代码:

$url = "/?ref=REFERRER'S-ID&sid=http://www.test.com";
$data = parse_url($url);

我收到与你相同的警告:

Warning: parse_url(/?ref=REFERRER'S-ID&sid=http://www.test.com) 
[function.parse-url]: Unable to parse URL

但这是在没有传递完整网址的时候......

答案 1 :(得分:0)

为什么不使用str_replace删除http://来清理$refURL