我需要解码来自推文的tinyurl
,
<?php
$url = "http://t.co/vpDXYaXl7m";
$full = URLDecode($url);
echo "URL is $full";
function URLDecode($url)
{
$ch = @curl_init($url);
@curl_setopt($ch, CURLOPT_HEADER, TRUE);
@curl_setopt($ch, CURLOPT_NOBODY, TRUE);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$url_resp = @curl_exec($ch);
preg_match('/Location: (.*)\n/', $url_resp, $i);
if (!isset($i[1]))
{
return $url;
}
return $i[1];
}
?>
它出现以下错误:
Fatal error: Cannot redeclare URLDecode() in F:\wamp\www\refresh\tinydecode.php
on line 23
问题是什么?有没有其他方法来解码这个小网址?
如果我使用CURL,是否需要更改?
答案 0 :(得分:1)
urldecode()
是一个内置的PHP函数。你不能覆盖这些功能名称(嗯,你可以,但不能没有特殊的黑客攻击)。将您的函数名称更改为其他名称,例如MyURLDecode
。
function MyURLDecode($url)
{
$ch = @curl_init($url);
@curl_setopt($ch, CURLOPT_HEADER, TRUE);
@curl_setopt($ch, CURLOPT_NOBODY, TRUE);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$url_resp = @curl_exec($ch);
preg_match('/Location: (.*)\n/', $url_resp, $i);
if (!isset($i[1]))
{
return $url;
}
return $i[1];
}
您可能希望将正则表达式更改为/Location:\s+(.*)\n/i
,以便考虑小写location
标题和额外的空格。