地址栏传参本质是http协议约定的url查询字符串,需用javascript(urlsearchparams)或服务端(如express的req.query)解析,中文等特殊字符必须用encodeuricomponent()编码,参数值均为字符串类型。

浏览器地址栏里 ?key=value 这部分就是查询参数(query string),不是 HTML 的功能,而是 HTTP 协议约定的传参方式。HTML 本身不“处理”它,但你可以用 JavaScript 读取,或者后端语言(如 PHP、Node.js)解析。
常见错误现象:http://example.com/?name=张三 页面打开后什么都没变——因为没写 JS 去读它,也没后端去接收它。
encodeURIComponent() 编码,否则可能被截断或解析失败?ID=123 和 ?id=123 是两个不同参数
URLSearchParams 是现代浏览器的标准 API,比手动切字符串靠谱得多,兼容性到 Chrome 49+/Firefox 44+。
使用场景:单页应用跳转后取参数、表单回填、A/B 测试分流。
示例:在控制台运行这段代码就能拿到 ?user=john&tag=web 中的值:
|
|
window.location.search 返回的是 ?key=val&other=1 这整段字符串,开头带 ?params.get('missing') 返回 null,不是 undefined,注意判空方式?id=1&id=2,get() 只返回第一个,getAll() 才能拿到数组
直接拼 '?name=' + name 是高危操作,遇到中文、&、= 就崩。比如 name = "张三&李四" 会变成 ?name=张三&李四,后半截被当成另一个参数。
正确做法永远用 encodeURIComponent() 包一层:
|
|
encodeURI() 不编码 / ? : @ & = + $ #,不能用于单个参数值;必须用 encodeURIComponent()url.parse() 默认不解码,得手动调 decodeURIComponent()vue-router)内部已封装好编码,但手写 location.href 时仍要自己处理
前端拼好 URL,后端得知道从哪取。Express 把查询参数自动挂到 req.query 上,不用额外解析。
示例请求:GET /search?q=js&limit=10
|
|
req.query 是对象,所有键值都是字符串,数字要手动 parseInt()/search?q=js&sort=desc&sort=asc,req.query.sort 是数组 ['desc', 'asc']?a=&b=1 中的 a),导致 req.query.a === undefined== 比较容易出错;还有就是没检查 req.query 是否为空对象或 null,一上来就 .split() 报错。
版权声明: 本站资源均来自互联网或会员发布,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!联系QQ:76900276
转载请注明: html中如何在地址栏传一个参数