2013-12-23 64 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