包含了“%”字符,浏览器在对“%”执行decodeURIComponent时报错,正确的解决是将%全部替换为%25再进行传输:

Str.replace(/%/g, '%25');

问题:
在做页面搜索功能的时候,需要URL地址中拼接查询关键字(key),然后 跳转到拼接后的地址(https://xxx.com/search?q=key)。如果key里面有中文字,浏览器会默认编码掉,所以这个页面调查询接口的时候需要先解码(/api/search?content=解码后的key),出现了上面的错误。
————————————————
版权声明:本文为CSDN博主「chenchao2016」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010486124/article/details/81102224

原因:

查询关键字包含一些浏览器敏感的关键词,例如:# , & , =,而导致报错的是 % ,是因为编码汉字是 % 开头的,多加一个 % 会导致 decodeURIComponent 执行报错。

解决:
在点击查询拼接关键字key的时候,对key中含有敏感的词进行转译,例如,将%号转译为 %25

其他一些关键字的编码对应为:

特殊字符    含义    编码
%    指定特殊字符    %25
#    表示锚点    %23
&    URL Search分隔符    %26
=    URL中指定参数的值    %3D
写一个方法,把key中的敏感字编码掉再去拼接字符串查询就可以了,这样在使用decodeURIComponent 就没问题了。

例如:

// 对查询关键字中的特殊字符进行编码
  encodeSearchKey(key) {
    const encodeArr = [{
      code: '%',
      encode: '%25'
    }, {
      code: '?',
      encode: '%3F'
    }, {
      code: '#',
      encode: '%23'
    }, {
      code: '&',
      encode: '%26'
    }, {
      code: '=',
      encode: '%3D'
    }];
    return key.replace(/[%?#&=]/g, ($, index, str) => {
      for (const k of encodeArr) {
        if (k.code === $) {
          return k.encode;
        }
      }
    });
  },

URIError: URI malformed错误相关推荐

  1. URIError: URI malformed

    url中有特殊字符导致出错,进行一次校验替换 checkfilename(filename) {filename = String(filename)if (filename.search('%') ...

  2. Uncaught URIError: URI malformed

    报错原因:decodeURI不能解码"%" 结局方法: 改用unescape函数

  3. uniapp页面跳转报错URI malformed解决办法

    错误示例 URI malformed" found in -> warn @ chunk-vendors.js:3503 e. 如图 问题原因: 是因为跳转url携带的中文参数中有'% ...

  4. 安卓7.0拍照遇到 Uri暴露错误

    最近,项目又做到,调用摄像头拍照获取图片这个功能. 用以前的代码直接用,发现在Android7.0上使用时会出现问题. Android6.0之后,动态申请权限已成常态. 调用摄像头拍照获取图片这个功能 ...

  5. activiti 解压zip java.lang.IllegalArgumentException: MALFORMED 错误

    工作流导入 @Overridepublic int create(MultipartFile file, String name, String category) {try{if (file != ...

  6. 诡异的sqlite3之malformed错误(一)

    诡异的sqlite3之malformed错误(一) 现象 现场设备生成并插入大规模的数据,设备异常将数据库拉出来检查时,报告malformed错误 sqlite3 版本 3.8.6 数据库文件大小 2 ...

  7. URI malformed

    问题: 通过<Link>进行路由跳转 接收参数时报错URI malformed 原因: 由于decodeURI转码时,通过%进行解析,如果字符串中存在%,则会出现URI malformed ...

  8. java zip malformed_java 解压zip java.lang.IllegalArgumentException: MALFORMED 错误

    zip压缩包在解压过程中,遇到了错误,提示如下 java.lang.IllegalArgumentException: MALFORMED at java.util.zip.ZipCoder.toSt ...

  9. Yum database disk image is malformed 错误

    解决办法: yum clean dbcache

最新文章

  1. WPF以Clickonce方式发布后使用管理员身份运行
  2. 当进度对话框和后台线程处于活动状态时,如何处理屏幕方向变化?
  3. iOS 隐藏下级页面的tabbar的统一处理
  4. 自然语言处理库——TextBlob
  5. python官网下载哪个版本好玩_Python官网不同版本的下载
  6. 比特币如何达成共识 - 最长链的选择
  7. java对日期进行加减操作以及比较大小
  8. 硬件:RS232、RS422和RS485的区别
  9. mysql中将某个字段做计算,mysql创建计算字段使用子查询教程
  10. 怎么读服务器文件内容,服务器上读取文件内容
  11. linux 双显卡 黑屏 amd,ubuntu上AMD显卡驱动黑屏问题的一种解决办法
  12. 用FileZilla创建的Ftp如何使用匿名登录
  13. Libre-SOC 系统级芯片
  14. JAVA基础之n+=1与n=n+1的区别
  15. 说说vue-cli中使用flexible和px2rem-loader
  16. mysql里面手动关闭_MySQL 启动与关闭(手动与自动)
  17. formData上传音乐文件
  18. 苹果电脑怎么安装计算机一级,苹果系统安装教程,详细教您苹果电脑怎么重装系统...
  19. java动图_马上学会!教你一个快速制作GIF动图的方法!
  20. Flutter 项目实战 应用图标启动页三

热门文章

  1. mysql进阶: mysql中的锁(全局锁/表锁/行锁/间隙锁/临键锁/共享锁/排他锁)
  2. 基于stm32的俄罗斯方块游戏机(5、俄罗斯方块产生的随机函数)(大三寒假)
  3. 乐视电视投屏投不了是什么原因
  4. win10系统 蓝牙功能不见了(蓝牙驱动)
  5. Chrom console js调试
  6. C语言中常见的置位操作(置0或置1)
  7. U3D log Flash shader 效果(标题流光效果)
  8. VMware安装CentOS 7及Linux Shell脚本
  9. seraku智能android镜面,安卓智能镜面 边照镜子边看天气量体重
  10. DNS检测 解决使用github速度慢(速度快了好多)