代码之家  ›  专栏  ›  技术社区  ›  bdalina

如何防止html属性值生成新行,我的json字符串值中断

  •  1
  • bdalina  · 技术社区  · 7 年前

    我将插入一个json字符串值作为button元素属性的值, 例如下面的例子

    var $json = JSON.stringify('{"Long_text":"This is \'my json string and soon..."}');
    
    $("#button_id").attr('data-json', $json);
    

    这在我的一些页面中是有效的,但是当文本中只有一个引号时,即使它是用斜线转义的,element属性中的值也会创建换行符并将其打断 比如:

    <button data-json="{"Long_text":"This is \' "
    
    "my json string and soon..."}" >Click</button>
    

    我试过用

    replace('/\r?\n|\r|\n/g/',''); //to replace multiple newlines
    

    即使我替换了双空格,它也不起作用,因为属性本身格式不正确。因此,当我获取属性并尝试解析json值时,会导致错误。

    我找到了这个,“-> Line break inside HTML tag attribute value “我应该用这个%0d%0a替换空格吗?如建议 保留换行符或空格?

    任何帮助或建议都是非常感谢的!谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   bdalina    7 年前

    我找到了一个解决方案,而不是用这个替换空格%0d%0a 从这个 Line break inside HTML tag attribute value

    var base64 =
                {
                    encode: function utoa(str)
                    {
                        return window.btoa(unescape(encodeURIComponent(str)));
                    },
                    decode: function atou(str)
                    {
                        return decodeURIComponent(escape(window.atob(str)));
                    }
                }
    

    我试过了,它也能工作,它也使字符串不可读,因为它是base64_编码的,它避免了空格和引号引起的换行。

    var $json = base64.encode(JSON.stringify('{"Long_text":"This is \'my json string and soon..."}'));
    
    $("#button_id").attr('data-json', $json);
    

    然后获取值并再次转换,

    var valid_json = JSON.parse(base64.decode($("#button_id").attr('data-json')));
    

    谢谢!