PHP解析主机+;仅限IP到IP地址

PHP解析主机+;仅限IP到IP地址,php,regex,Php,Regex,我正在尝试获取以下信息:46-121-31-23.example.net 解析为:46.121.31.23 使用正则表达式替换连字符和删除字符是不够的,因为这样做的结果会是46.121.31.23..类似的情况 $ip = preg_replace("/\..*/", "", $ip); $ip = str_replace("-", ".", $ip); 不过,我同意@klaustopher的观点,即使用gethostbyname通常更安全:() 编辑: 此外,您可以尝试这样做: 应该可以用。

我正在尝试获取以下信息:
46-121-31-23.example.net

解析为:
46.121.31.23

使用正则表达式替换连字符和删除字符是不够的,因为这样做的结果会是
46.121.31.23..
类似的情况

$ip = preg_replace("/\..*/", "", $ip);
$ip = str_replace("-", ".", $ip);
不过,我同意@klaustopher的观点,即使用
gethostbyname
通常更安全:()

编辑:

此外,您可以尝试这样做:


应该可以用。

那么
gethostbyname()怎么样?虽然您的特定主机名将IPv4地址编码为其“友好”名称,但无法保证该名称始终为真。因此,请使用实名->ip查找系统:DNS

$ip = gethostbyname('46-121-31-23.example.net');
echo $ip; // 46.121.31.23

注释后续:该主机名显然不存在:

marc@panic:~$ host -t ns static.012.net.il             
static.012.net.il name server pdns.goldenlines.net.il.
static.012.net.il name server sdns.goldenlines.net.il.

marc@panic:~$ host 46-121-31-23.static.012.net.il pdns.goldenlines.net.il   
Using domain server:
Name: pdns.goldenlines.net.il
Address: 212.117.129.3#53
Aliases: 

Host 46-121-31-23.static.012.net.il not found: 3(NXDOMAIN)
因此,没有办法进行DNS查找,因为该域的权威服务器不知道您在说什么

但是,反向映射(IP->主机名)不起作用:

marc@panic:~$ host 46.121.31.23
23.31.121.46.in-addr.arpa domain name pointer 46-121-31-23.static.012.net.il.

因此,出于某种原因,该提供商只进行反向映射,而不进行正向映射。

之前,将所有内容都设置好,然后用
替换
-
并不是每个提供商都以这种形式向您提供主机。获取IP地址的最佳方法是使用
gethostbyname($yourHost)
这不是主机+IP,而是主机。你的问题不是很精确。由于某种原因,它不适用于
gethostbyname('46-121-31-23.static.012.net.il')
marc@panic:~$ host 46.121.31.23
23.31.121.46.in-addr.arpa domain name pointer 46-121-31-23.static.012.net.il.