laoyang
c0b9b44ca2
fix(粘贴): URL 提取按括号配对裁剪,修复高德链接被截断导致地址丢失
## 现象(用户实测)
粘贴高德分享链接后,识别出的地点"只有一半,只有一部分"。
## 根因
高德分享链接里的 POI 名称含**未编码的半角括号**:
...%E9%9D%92%E5%B2%9B%E8%8F%9C(黄岛珠江路店)%2C武夷山路118号...
↑ 就是这个 ( 和 )
而 URL 提取正则是 `/https?:\/\/[^\s"'<>()【】]+/i`(当时还排除了半角 `)`),
于是一到第一个 `)` 就停:
提取长度 221 / 原文 456 ← 只拿到不到一半
__p 切成 4 段(应为 5 段)
名称 = "船歌·鱼水饺青岛菜(黄岛珠江路店" ← 括号不闭合
地址 = 空 ← 第 5 段整个丢失
## 为什么当初排除括号
本意是防止把 URL 后跟着的中文括注一起吞掉,如
`看这个 https://x.com/a(路线图在这里)`。
但规则太粗暴,误伤了 URL 内部的合法括号 —— RFC 3986 允许 `(` `)` 出现在 query。
## 修法
1. 正则放宽:只排除空白 / 引号 / 尖括号 / **全角**括号(全角括号不会被编码进 URL,
出现在明文里必然是用户自己加的中文括注)
2. 新增 `trimUrlTail()`:从左扫描数括号,`depth < 0` 说明遇到多余的右括号,
那里才是真正的 URL 边界
3. 再裁掉末尾可能粘上的中文标点(。,、;!?)
## 验证(用用户提供的真实 URL 跑等价逻辑)
修复后:
提取长度 780 / 原文 780 ← 完整
__p 段数 5
[0] B02140WITR
[1] 35.95086086125046
[2] 120.19152268767353
[3] 船歌·鱼水饺青岛菜(黄岛珠江路店) ← 括号完整
[4] 武夷山路118号中南·海湾新城(珠江路金石国际广场旁) ← 地址回来了
边界场景:
"https://x?a=1(路线图)" → https://x?a=1 ✅ 中文括注被裁掉
"https://x?a=1) 后面有字" → https://x?a=1 ✅ 多余右括号被裁掉
同时确认另外两处 `split(',')` 都用了 `slice(2).join(',')` 拼回,
地址内部含逗号时不会被切错。
## 编译
`BUILD SUCCESSFUL`
## 未验证
真机端到端(写剪贴板 → 点粘贴 → 看结果)需人工操作:
hdc 没有可用的剪贴板写入工具(`paste` 是 Linux 文本合并命令,非剪贴板服务)。
解析逻辑本身已用真实 URL 在等价实现上验证通过。
2026-11-04 07:36:51 +08:00
..
2026-11-04 07:36:51 +08:00
2026-09-13 15:50:37 +08:00
2026-09-13 15:50:37 +08:00
2026-09-13 15:50:37 +08:00
2026-09-13 15:50:37 +08:00