You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中preg_split分割GPS坐标时为何出现空元素?

问题原因分析

你的问题核心出在多字节字符的正则匹配兼容上。°是一个UTF-8多字节字符(占2个字节),而默认情况下preg_split采用单字节模式解析字符串,无法正确识别这个多字节符号,会把它拆成两个独立的字节处理。如果其中某个字节被正则字符集[°'\"]误匹配,就会在两个分隔符之间产生空元素,也就是你看到的索引1的空值。

解决办法

有两种简单有效的方式可以解决这个问题:

1. 添加UTF-8修饰符u

在正则表达式末尾加上u,让PHP正则引擎以UTF-8多字节模式解析字符串,这样就能正确识别°作为单个分隔符:

$long = "13°47'52.544\"E";
$res = preg_split("/[°'\"]/u", $long);
// 结果:array(0=>13, 1=>47, 2=>52.544, 3=>E)

2. 使用PREG_SPLIT_NO_EMPTY过滤空元素

如果你不想纠结编码细节,可以直接在preg_split的第四个参数传入PREG_SPLIT_NO_EMPTY,让函数自动忽略拆分产生的空元素:

$long = "13°47'52.544\"E";
$res = preg_split("/[°'\"]/", $long, -1, PREG_SPLIT_NO_EMPTY);
// 结果:array(0=>13, 1=>47, 2=>52.544, 3=>E)

两种方法都能得到你想要的干净数组,优先推荐第一种,因为它从根源上解决了多字节字符的匹配问题。

内容的提问来源于stack exchange,提问作者Skyfox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:34:42