静态网页URL参数中部分等号被浏览器转义为%3D的问题咨询
问题解答:URL中等号被转义的原因与解决方案
你遇到的这个问题其实是URL规范和浏览器解析逻辑的常见小坑,咱们一步步拆解:
一、为什么第一个等号不受影响?
第一个等号是查询参数键值对的标准分隔符(对应?locationFrom=xxx的结构),属于URL查询字符串的合法语法组成部分。浏览器会明确识别它是URL结构的一部分,而不是参数值里的特殊字符,所以绝对不会对它进行转义。
二、能不能让浏览器不转义后面的等号?
直接强制浏览器跳过转义是行不通的——这是浏览器遵循URL规范的默认行为,目的是保证URL的合法性。不过你可以通过修正URL的写法彻底解决这个问题,具体操作很简单:
你的URL用了分号;来分隔多个查询参数,但这并不是所有浏览器和服务器都能稳定识别的标准写法(虽然部分场景支持,但很容易出现解析歧义)。HTTP标准规定的查询参数分隔符是&,把URL里的分号全部替换成&即可:
https://www.nejlepsi-skolky.cz/list-map-of-kindergartens-seznam-mapa-skolek-jesli?locationFrom=Velk%C3%A9%20Opatovice,Dlouh%C3%A1%20429&latFrom=49.6120414733887&lonFrom=16.6786785125732
修改后,每个key=value都会被浏览器正确识别为独立的查询参数,里面的等号作为键值对的结构分隔符,自然就不会被转义了。
三、补充:分号导致转义的深层原因
在URL规范中,分号;属于预留字符,理论上可以用来分隔参数,但很多浏览器的解析逻辑会把分号后面的内容判定为前一个参数值的一部分(而不是新参数的开始)。这时候,参数值里的等号就变成了需要编码的特殊字符,浏览器会自动把它转义为%3D,以此保证URL符合格式要求。
因为你是静态站点无法修改Nginx配置,所以修改URL的参数分隔符是最直接、零成本的解决方案。
内容的提问来源于stack exchange,提问作者Puser
相关产品推荐
相关产品推荐

