2013-12-23 89 views
0

我需要解码tinyurl从微博的到来,解码叽叽喳喳dinyurl获得完整的URL链接

<?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

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头和额外的空格。

+0

谢谢,但它不给解码的网址。附: http://codepad.org/Dr0eYmxs。让我知道,如果你有任何想法这个 – user123

+0

@ user123:你是否更新正则表达式,如我所说?该错误可能是因为CodePad没有启用cURL。看[这个演示](http://codepad.viper-7.com/ofM5Zr)。它输出解码的URL。 –

+0

可以请你解释'/ Location:\ s +(。*)\ n/i'背后的逻辑。 – user123