解码twitter dinyurl获取完整的url链接

时间:2013-12-23 10:17:59

标签: php twitter

我需要解码来自推文的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,是否需要更改?

1 个答案:

答案 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标题和额外的空格。