我需要匿名化 IPv4 和 IPv6 地址,所以我编写了这个粗略的解决方案:
if (strlen($_SERVER['REMOTE_ADDR']) <= 15) { // Sorry: 15 NOT 12
echo htmlentities(substr_replace($_SERVER['REMOTE_ADDR'], 'XXX', -3), ENT_QUOTES);
} else {
echo htmlentities(substr_replace($_SERVER['REMOTE_ADDR'], 'XXXX:XXXX', -9), ENT_QUOTES);
}
Run Code Online (Sandbox Code Playgroud)
它适用于全长 IPv4 和 IPv6 地址,例如
207.142.131.005
2001:0db8:0000:08d3:0000:8a2e:0070:7344
但不是像这样的缩写地址
207.142.131.5
2001:0db8::8d3::8a2e:7:7344
我想知道是否有使用 preg_replace 和一些正则表达式魔法的优雅解决方案?