2014-04-18 101 views
0

我不是JavaScript的最佳選擇。一段時間後,我能夠在PHP中獲得一個很好的ipv62long()函數,並且能夠幫助某個人解答他們的問題。但在我看來,張貼到PHP只是爲了得到結果。像JavaScript這樣的功能可以實現嗎?我在尋找什麼功能來實現它?我嘗試了無數次搜索,並且總是反饋給PHP示例。JavaScript將IPv6變成IPv4?

function ipv62long($ip) { 
    $binNum = ''; 
    foreach (unpack('C*', inet_pton($ip)) as $byte) { 
     $binNum .= str_pad(decbin($byte), 8, "0", STR_PAD_LEFT); 
    } 
    return base_convert(ltrim($binNum, '0'), 2, 10); 
} 

$ip = ipv62long(urldecode('2001%3a0%3a9d38%3a6abd%3a248d%3a2ee4%3a3f57%3afd26')); 
echo $ip; 
echo '<p>' . long2ip($ip) . '</p>'; 
+1

Java是一種與JavaScript不同的語言,而PHP @Thomas我也在搜索欄上做了功課。 – WASasquatch

+0

語言與問題無關。 – Thomas

+0

你怎麼看,這個問題是關於用特定語言來做的......大聲笑 – WASasquatch

回答

0

只是踢我這樣做是在PHP太:)

在解釋PHP多一點: 我用inet_pton得到一個二進制值,然後通過使用OR和位移位我建立一個新的長值(4字節)。

由於inet_pton返回一個結構,我使用ord來獲取數據的十進制值。

然後我翻轉長使用NOT並把它傳遞給long2ip ...

<?PHP 
$data = inet_pton(urldecode('2001%3a0%3a9d38%3a6abd%3a248d%3a2ee4%3a3f57%3afd26')); 
// 192.168.2.217 

// build a long 4 bytes using binary ORing 
$ip_as_long = ord($data[15]); 
$ip_as_long |= ord($data[14]) << 8; 
$ip_as_long |= ord($data[13]) << 16; 
$ip_as_long |= ord($data[12])<<24; 

echo long2ip(~$ip_as_long); 
?> 

的Javascript

<script> 
    var value = '2001:0:9d38:6abd:248d:2ee4:3f57:fd26'; 

    var split_str = value.split(':'); 
    value = split_str[6] + split_str[7]; 

    var ip_1 = ~parseInt(value.substring(0,2),16) & 0xFF; 
    var ip_2 =~parseInt(value.substring(2,4),16) & 0xFF; 
    var ip_3 =~parseInt(value.substring(4,6),16) & 0xFF; 
    var ip_4 =~parseInt(value.substring(6,8),16) & 0xFF; 

    alert(ip_1+'.'+ip_2+'.'+ip_3+'.'+ip_4); 
    </script> 

享受。

+1

可能使用Teredo地址,但它通常不適用於IPv6。 –

+0

是的......我們知道這個聰明人......你不能將IPv6轉換爲IPv4,否則我們已經知道,如果你閱讀上面的評論......這就是他想要的! – Thomas

+1

@Thomas冷靜下來,別那麼防守。 StackOverflow是許多Google搜索的結果。這些人不會閱讀每一條評論來弄清楚發生了什麼。這些基本信息本身應該在答案中。 –