在 Uni-App 中,使用 uni.getUserProfile
获取用户信息时,如果用户的昵称中包含特殊字符(如 &
),可能会导致昵称被截断或丢失部分内容。这是因为某些特殊字符在 URL 或 JSON 解析中具有特殊含义,可能导致解析错误或数据丢失。
解决方案
以下是几种可能的解决方案:
1. 对昵称进行编码和解码
在获取到昵称后,可以使用 encodeURIComponent
和 decodeURIComponent
对昵称进行编码和解码,确保特殊字符不会被截断。
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.stringify
和 JSON.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);
}
});