美文网首页
关于url传值的问题—encodeURIComponent

关于url传值的问题—encodeURIComponent

作者: 422ccfa02512 | 来源:发表于2019-12-29 11:25 被阅读0次

    在以往的通过url进行数据传值时,如果需要传输对象,通常我是使用JSON.stringify将键值对的值通过编译为JSON字符串,之后到另一个页面,通过JSON.parse进行解析。直到上周遇到了一个问题。测试告诉我有一个订单没有回显,看看是不是报错了,之后进行排查,一看报错了,最初可能以为是超过url的长度了,对比一下其他订单传值都是差不多长度,并没有多长,后面调试发现传输到下一个页面的值只有一截,问题找到了,原因是因为前台用户输入了一个 特殊字符=(等于符号),由于等于符号本身在url传输时有着特殊的作用。

    为了避免这种问题的再次发生,我们需要对url进行编码,需要在传输的过程中对用户输入部分进行encodeURIComponent编码,之后进行decodeURIComponent进行解码。为了保险一点,传输时,不管是否为用户输入,最好都编码一次。

    当然使用encodeURIComponent不能解码的字符字母、数字、(、)、.、!、~、*、'、-和_,其中!, ', (, ), 和 *RFC 3986保留字符,我们可以通过下面这种方式将其转化为Unicode码,需要用到时在用decodeURIComponent进行解码

    function fixedEncodeURIComponent (str) {
      return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
        return '%' + c.charCodeAt(0).toString(16);
      });
    }
    

    相关文章

      网友评论

          本文标题:关于url传值的问题—encodeURIComponent

          本文链接:https://www.haomeiwen.com/subject/aohvnctx.html