桑德·史蒂芬中提到的我之前的一个问题:
像 0000:0000:0000:0000:0000:0000:192.168.0.1 这样的地址写为
0000:0000:0000:0000:0000:0000:c0a8:0001 这是完全相同的地址
但以十六进制表示法。
如何在 PHP 中检测地址是否写成如下形式:::0000:192.168.0.1
or 0000::0000:192.168.0.1
or 0000:0000:0000:0000:0000:0000:192.168.0.1
ETC。?检查基于 IP 的字符串是否包含“.”就足够了和 ':' ?
我如何将其更改为完整字符串0000:0000:0000:0000:0000:0000:c0a8:0001
?
我是否正确,将其更改为 IPv4 将类似于:
<?php
$strIP = '0000:0000:0000:0000:0000:0000:192.168.0.1';
$strResult = substr($strIP, strrpos($strIP, ':'));
echo $strResult; //192.168.0.1 ?
?>
...或者正确的 IP 字符串表示比这个片段可以做的更复杂?
我不敢相信我一口气写完了这一切,而且第一次就成功了。
$strIP = '0000:0000:0000:0000:0000:0000:192.168.0.1';
$arrIP = explode(':', $strIP);
if( preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $arrIP[count($arrIP)-1]) ) {
$ip4parts = explode('.', $arrIP[count($arrIP)-1]);
$ip6trans = sprintf("%02x%02x:%02x%02x", $ip4parts[0], $ip4parts[1], $ip4parts[2], $ip4parts[3]);
$arrIP[count($arrIP)-1] = $ip6trans;
$strIP = implode(':', $arrIP);
}
echo $strIP; //output: 0000:0000:0000:0000:0000:0000:c0a8:0001
基本上:
- 爆炸字符串
:
- 检查最后一个四元组的格式是否类似于 IP4 地址
- 爆炸最后一个四边形
.
- 将 IP4 八位字节重新打印为两个十六进制四位字节
- 更换新的 IP4 四核
- 内爆阵列
:
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)