You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

构造含特殊字符变量的URL致JSON无效,如何有效转义特殊字符?

解决URL中JSON参数的特殊字符转义问题

嘿,我完全懂你踩的这个坑——手动拼接带特殊字符的URL参数简直是噩梦,尤其是当这些字符同时属于URL和JSON的特殊字符时。让我一步步帮你捋清楚解决办法:

问题根源

你现在的写法是直接把变量硬塞进JSON字符串,再拼进URL里。比如title_text里的&会被URL编码成%26,但真正的麻烦是:&本身是URL的参数分隔符,浏览器会把%26后面的内容当成新的URL参数,直接把data参数里的JSON给截断了,结构自然就无效了。而且你只单独对title_textJSON.stringify,既没处理整个JSON对象,也没对最终的JSON字符串做URL编码,所以才没解决问题。

正确的处理流程

正确的姿势应该是分四步走,把JSON构造和URL编码彻底分开:

  • 先构造完整的JavaScript对象,把变量合理放进去
  • 把整个对象转成合法的JSON字符串
  • 对这个JSON字符串做URL编码,确保所有URL特殊字符都被转义
  • 最后再拼进URL里

这样就能同时搞定JSON的特殊字符和URL的特殊字符,不会互相干扰。

代码示例

// 1. 先构造包含查询内容的对象
const queryData = {
  query: `${title_text} ${city_name}`
};

// 2. 把对象转成标准的JSON字符串
const jsonStr = JSON.stringify(queryData);

// 3. 对整个JSON字符串做URL编码
const encodedJson = encodeURIComponent(jsonStr);

// 4. 拼接成最终的合法URL
const URL = `https://bla.com/api/multicomplete?data=${encodedJson}`;

为什么这样有效?

  • JSON.stringify会自动处理JSON里的特殊字符(比如引号、反斜杠),生成格式完全合法的JSON文本。
  • encodeURIComponent会把整个JSON字符串里的URL特殊字符(&=%等)转成URL安全的编码,浏览器就不会把它们当成URL的参数分隔符,而是完整地作为data参数的一部分传递给后端。

拿你之前的例子来说,title_text = 'Airport Hotel Park & Fly Sofia'用这个方法处理后:

  • 生成的JSON字符串是{"query":"Airport Hotel Park & Fly Sofia"}
  • 经过编码后会变成%7B%22query%22%3A%22Airport%20Hotel%20Park%20%26%20Fly%20Sofia%22%7D
  • 后端拿到data参数后,解码就能得到完整合法的JSON,不会再出现结构错误。

为什么之前的JSON.stringify没用?

因为你只单独转义了title_text,但没处理整个JSON对象,更关键的是没有对最终的JSON字符串做URL编码。单独转义title_text后拼进URL,&还是会被浏览器识别成参数分隔符,直接把JSON给拆坏了。

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

火山引擎 最新活动