我当然是一个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函数被抛弃的任何想法? (我实际上测试了这个问题,它会在变量中以“:/”的形式抛出错误)
答案 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
?