首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP从IP地址和ipv6中删除端口号?

如何使用PHP从IP地址和ipv6中删除端口号?
EN

Stack Overflow用户
提问于 2021-03-26 01:43:49
回答 2查看 107关注 0票数 1

我使用的是strstr( $ip, ':') === false ? $ip : strstr( $ip, ':', true);,但这当然不适用于ipv6,所以我想知道是否有一种更简洁的方法来检查是否提供了端口,并在PHP中删除它。

因此,对于:

代码语言:javascript
复制
192.168.0.1
192.168.0.1:3233
2001:569:be89:6200:5da6:745a:84fe:d899:3423

我得到了:

代码语言:javascript
复制
192.168.0.1
192.168.0.1
2001:569:be89:6200:5da6:745a:84fe:d899
EN

回答 2

Stack Overflow用户

发布于 2021-03-26 02:02:04

使用parse_url(, PHP_URL_HOST)

代码语言:javascript
复制
<?php
$arr = [
    '192.168.0.1',
    '192.168.0.1:3233',
    '2001:569:be89:6200:5da6:745a:84fe:d899:3423',
    '[2001:db8::1]:8080'
];

print_r(array_map(fn($v) => parse_url('http://'.$v, PHP_URL_HOST), $arr));

结果将是所有主机,没有端口

代码语言:javascript
复制
Array
(
    [0] => 192.168.0.1
    [1] => 192.168.0.1
    [2] => 2001:569:be89:6200:5da6:745a:84fe:d899
    [3] => [2001:db8::1]
)
票数 2
EN

Stack Overflow用户

发布于 2021-03-27 04:44:47

实际上,我最终使用了这个,这不是最优雅的解决方案,但它是有效的。

代码语言:javascript
复制
if ( strpos( $ip, ':') !== false ) {
    // ipv6
    if( count( explode(':', $ip ) ) > 2 && strpos( $ip, '[') !== false ) 
        $ip = parse_url('http://'.$ip, PHP_URL_HOST);
    elseif( count( explode(':', $ip ) ) === 2 ) 
        $ip = strstr( $ip, ':', true );
}

请注意,the answer from @lawrence-cherone不适用于IP 2001:569:be89:6200:8936:7907:fcf1:961b

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66804903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档