特殊字符u2028导致的Javascript脚本异常

情景描述

特殊字符\u2028导致的Javascript脚本异常

JSONP请求的时候返回的是一个Js方法,如果其结果对象的属性值含有非法字符的话,浏览器解析失败就会报错。

常见于文章内容,textarea的输入。

解释

\u2028是一个神奇的字符,是行分隔符,会被浏览器理解为换行,而在Javascript的字符串表达式中是不允许换行的,从而导致错误。

浏览器上表现为一个小点,并且在编辑器里并不会显示出来,浏览器也不会加以解析

// 中和控之间就插入了那个特殊的字符
{"summary":"中
控台彩色大屏"}

解决方法

把特殊字符转义替换即可,代码如下所示:

str = str.replace("\u2028", "\\u2028");

替换后,用之前有问题的文章测试,加载正常,问题解决。

unicode 中的特殊字符部分展示如下,建议都进行转义处理

Unicode 字符值 转义序列 含义 类别
\u0008 \b Backspace
\u0009 \t Tab 空白
\u000A \n 换行符(换行) 行结束符
\u000B \v 垂直制表符 空白
\u000C \f 换页 空白
\u000D \r 回车 行结束符
\u0022 " 双引号 (")
\u0027 \‘ 单引号 (‘)
\u005C |反斜杠 ()
\u00A0 不间断空格 空白
\u2028 行分隔符 行结束符
\u2029 段落分隔符 行结束符
\uFEFF 字节顺序标记 空白

根据 json2 这个库,需要过滤的字符如下:

var reg = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
 
reg.test('中
控台彩色大屏') // true,中和控之间是插入了那个特殊字符的

reg.test('中\u2028控台彩色大屏') // true,等价于上面的。

reg.test('中控台彩色大屏') // false

参考

http://www.mamicode.com/info-detail-1261315.html

posted @ 2020-03-16 00:06  Ever-Lose  阅读(1012)  评论(0编辑  收藏  举报