首页 > 解决方案 > 如何使用 PHP 从 IP 地址和 ipv6 中删除端口号?

问题描述

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

因此对于:

192.168.0.1
192.168.0.1:3233
2001:569:be89:6200:5da6:745a:84fe:d899:3423

我得到:

192.168.0.1
192.168.0.1
2001:569:be89:6200:5da6:745a:84fe:d899

标签: php

解决方案


利用parse_url(, PHP_URL_HOST)

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

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

Array
(
    [0] => 192.168.0.1
    [1] => 192.168.0.1
    [2] => 2001:569:be89:6200:5da6:745a:84fe:d899
    [3] => [2001:db8::1]
)

推荐阅读