IOS request 请求参数有特殊字符+号变成空格 uni-app

IOS request 请求参数有特殊字符+号变成空格 uni-app

开发环境 版本号 项目创建方式
PC Windows 10 教育版 CLI
手机 iOS
手机版本号 iOS 18
手机厂商 苹果
手机机型 iPhone 13
页面类型 vue
vue版本 vue3
打包方式 云端
CLI版本号 3.0.0-4070520250711001

操作步骤:

const str = encodeURIComponent('+123')  
uni.request({  
  method: 'post',  
  data: {  
     demo: str  
  }  
})

IOS请求参数有+号特殊字符的情况

预期结果:

请求参数特殊字符+号不会变成空格

实际结果:

请求参数特殊字符+号变成了空格

bug描述:

const str = encodeURIComponent('+123')  
uni.request({  
  method: 'post',  
  data: {  
     demo: str  
  }  
})

str请求时特殊字符+号的处理情况
(IOS)
不编码和encodeURIComponent编码,请求时特殊字符+号会变成空格(抓包后看到+号变成了空格,params.png)
(H5,安卓)
encodeURIComponent编码后正常

IOS要怎么处理才不会出现空格


更多关于IOS request 请求参数有特殊字符+号变成空格 uni-app的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

使用 HBuilderX 4.81 + Vue3 + iPhone 真机运行到标准基座,使用下面代码表现正常。未能复现你的问题,请提供更多信息。提供服务端打印日志说明问题。

更多关于IOS request 请求参数有特殊字符+号变成空格 uni-app的实战教程也可以访问 https://www.itying.com/category-93-b0.html


更新:data 参数不会参与额外的逻辑,我使用 encode 和不是用包装,运行到 iPhone 真机、h5 观察 network 和 服务端打印的参数都正常。请提供完整复现工程、服务端打印截图,自查是否有额外的插件、逻辑处理你的业务代码。

这是一个iOS平台下URL编码处理的常见问题。在URL编码中,+号被保留用于表示空格,这是URL编码规范的一部分。

iOS平台对URL参数的处理机制与H5、Android存在差异。当你使用encodeURIComponent('+123')时,编码结果是%2B123,但在iOS的uni.request中,系统可能会对已编码的参数进行二次解码,导致%2B被还原为+,而+在URL参数中又被解释为空格。

解决方案:

  1. 双重编码:对包含特殊字符的参数进行两次encodeURIComponent编码
const str = encodeURIComponent(encodeURIComponent('+123'))
uni.request({
  method: 'post',
  data: {
     demo: str
  }
})
  1. 使用自定义header:明确指定Content-Type为application/x-www-form-urlencoded
const str = encodeURIComponent('+123')
uni.request({
  method: 'post',
  header: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  data: {
     demo: str
  }
})
  1. 手动替换:在编码后手动将+号替换为%2B
const str = encodeURIComponent('+123').replace(/\+/g, '%2B')
uni.request({
  method: 'post',
  data: {
     demo: str
  }
})
回到顶部