uni-app 昵称含有特殊字符(例如&)时,调用uni.getUserProfile取到的昵称会被截断

uni-app 昵称含有特殊字符(例如&)时,调用uni.getUserProfile取到的昵称会被截断

项目信息 详情
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 Catalina 10.15.5
HBuilderX类型 正式
HBuilderX版本号 3.4.7
第三方开发者工具版本号 1.05.2204250
基础库版本号 2.22.0
项目创建方式 HBuilderX

操作步骤:

如标题所述

预期结果:

执行示例代码在控制台显示完整的昵称

实际结果:

执行示例代码在控制台显示的昵称被截断

bug描述:

代码如下:

uni.getUserProfile({  
    desc: '用于完善会员资料',  
    success: (res) => {  
        console.log(res.userInfo.nickName) // 这里发现昵称被截断  
    },  
    fail: (err) => {  
        reject(err);  
    }  
});

执行以上程序,发现控制台输出的昵称被截断。例如用户昵称是“张三&李四”,控制台显示的是“张三”

1 回复

在 Uni-App 中,使用 uni.getUserProfile 获取用户信息时,如果用户的昵称中包含特殊字符(如 &),可能会导致昵称被截断或丢失部分内容。这是因为某些特殊字符在 URL 或 JSON 解析中具有特殊含义,可能导致解析错误或数据丢失。

解决方案

以下是几种可能的解决方案:


1. 对昵称进行编码和解码

在获取到昵称后,可以使用 encodeURIComponentdecodeURIComponent 对昵称进行编码和解码,确保特殊字符不会被截断。

uni.getUserProfile({
  desc: '获取用户信息',
  success: (res) => {
    const nickname = res.userInfo.nickName;
    // 编码昵称
    const encodedNickname = encodeURIComponent(nickname);
    console.log('编码后的昵称:', encodedNickname);

    // 解码昵称
    const decodedNickname = decodeURIComponent(encodedNickname);
    console.log('解码后的昵称:', decodedNickname);
  },
  fail: (err) => {
    console.error('获取用户信息失败:', err);
  }
});

2. 处理 JSON 数据

如果昵称是通过 JSON 传输的,确保在解析 JSON 时正确处理特殊字符。可以使用 JSON.stringifyJSON.parse 来确保数据完整性。

uni.getUserProfile({
  desc: '获取用户信息',
  success: (res) => {
    const userInfo = res.userInfo;
    // 将用户信息转为 JSON 字符串
    const userInfoStr = JSON.stringify(userInfo);
    console.log('用户信息字符串:', userInfoStr);

    // 解析 JSON 字符串
    const parsedUserInfo = JSON.parse(userInfoStr);
    console.log('解析后的用户信息:', parsedUserInfo);
  },
  fail: (err) => {
    console.error('获取用户信息失败:', err);
  }
});

3. 后端处理

如果昵称是从后端接口获取的,确保后端在处理昵称时对特殊字符进行转义或编码。例如,后端可以对昵称进行 Base64 编码,前端再解码。


4. 使用正则表达式过滤特殊字符

如果不需要保留特殊字符,可以使用正则表达式过滤掉特殊字符。

uni.getUserProfile({
  desc: '获取用户信息',
  success: (res) => {
    const nickname = res.userInfo.nickName;
    // 过滤特殊字符
    const filteredNickname = nickname.replace(/[^\w\s]/gi, '');
    console.log('过滤后的昵称:', filteredNickname);
  },
  fail: (err) => {
    console.error('获取用户信息失败:', err);
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!