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

Go语言中url.Parse解析含特殊字符URL报错求助

Go语言url.Parse解析URL时端口无效错误分析与解决

解析URL时触发如下panic:

panic: parse "http://x:SmT2fH": invalid port ":SmT2fH" after host

使用的代码如下:

s := "http://x:S%40mT2fH#%25PVfTA5gjCtn@host:5432/default"

u, err := url.Parse(s)
if err != nil {
    panic(err)
}

fmt.Println(u)

期望解析出用户名为x,密码为S%40mT2fH#%25PVfTA5gjCtn,但解析器误将部分内容识别为无效端口。

问题原因

  • URL中的#是**片段标识符(Fragment)**的起始标记,解析器会将#之后的所有内容直接识别为URL的片段部分,而非用户信息(Userinfo)的组成部分。
  • 你的URL中#未进行URL编码,导致解析器在遇到#时直接截断,把http://x:S%40mT2fH当成了协议+主机端口段:x被识别为主机,:S%40mT2fH被识别为端口,但端口必须是数字格式,因此触发"invalid port"错误。

解决方案

需要对密码中的#进行URL编码,替换为%23,修改后的URL代码如下:

s := "http://x:S%40mT2fH%23%25PVfTA5gjCtn@host:5432/default"

此时url.Parse会正确识别用户信息:

  • 用户名:x
  • 密码:S%40mT2fH#%25PVfTA5gjCtn(可通过u.User.Password()获取解码后的密码)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:31:19