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


    情景描述

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

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

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

    解释

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

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

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

    解决方法

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

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

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

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

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

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

    var reg = /[\"u0000-u001fu007f-u009fu00adu0600-u0604u070fu17b4u17b5u200c-u200fu2028-u202fu2060-u206fufeffufff0-uffff]/g;
     
    reg.test('中
控台彩色大屏') // true,中和控之间是插入了那个特殊字符的
    
    reg.test('中u2028控台彩色大屏') // true,等价于上面的。
    
    reg.test('中控台彩色大屏') // false
    

    参考

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

  • 相关阅读:
    java练习题2
    java练习题
    java输入输出
    字符集
    eclipse快捷键
    类和对象练习-people
    类和对象-三角形
    权限修饰符-输出求和阶乘
    权限修饰符-练习
    权限修饰符-father&&son
  • 原文地址:https://www.cnblogs.com/everlose/p/12501279.html
Copyright © 2020-2023  润新知