最近在H5 做移动端的时候,遇到了一个问题,就是一个文本框里面,用户
输入了自己的工作内容、会议记录等等。客户那边反馈,提交失败!经验问题,这是由于用户使用了“空格”,是的,有些奇怪,空格不是很常见的吗?
问题是我登录后台查看报文时发现一个很奇怪的现象:\u00a0 按理来说,只要编码转换一下就可以解决的。这个不行,最后使用 正则匹配 替换掉就好了。
解决关于 \u00a0 特殊空格的值。
replace(/\u00a0|\s+/ig, '');
/*
* 转换特殊字符*/
/*编码*/
encode:function(str) {
var patt=/[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则
str = str.replace(patt, function(char){
var H, L, code;
if (char.length===2) {
H = char.charCodeAt(0); // 取出高位
L = char.charCodeAt(1); // 取出低位
code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法
return "&#" + code + ";";
} else {
return char;
}
});
var entityMap = {
"&": "&",
"<": "<",
">": ">",
'"': '\"',
// "'": ''',
"/": '/',
"$":'$',
// "\\":"\\"
};
// encodeURIComponent该方法是为了兼容后端不兼容\的问题
// return encodeURIComponent(String(str).replace(/[&<>"\/$]/g, function (s) {
// return entityMap[s];
// }));
var delStr = String(str).replace(/[&<>"\/$]/g, function (s) {
return entityMap[s];
});
// (/\\u00a0|\s+/ig, '') 就是这个解决了 u00a0 的空格bug
return delStr.replace(/\n/g,'\\n').replace(/\\u00a0|\s+/ig, '');
},