当前位置: 首页 > news >正文

decodeURIComponentSafe转义%问题记录URI malformed

decodeURIComponentSafe转义%问题记录

在这里插入图片描述

问题背景

当我们解析包涵 % 字符的字符串时,会出现错误如下 Uncaught URIError: URI malformed
在这里插入图片描述

解决方案:

function decodeURIComponentSafe(s) {if (!s) {return s;}return decodeURIComponent(s.replace(/%(?![0-9][0-9a-fA-F]+)/g, '%25'));
}

上述代码说明

  1. 输入检查if (!s) { return s; }:
    这行代码检查输入参数 s 是否为假值(如 null、undefined 或空字符串)。如果是,则直接返回该值。这可以防止在后续处理中出现错误。
  2. 替换无效编码 s.replace(/%(?![0-9][0-9a-fA-F]+)/g, '%25'):
    这部分使用正则表达式查找所有不合法的百分号编码。具体来说,它寻找所有以 % 开头但后面没有跟随两个十六进制数字(0-9,a-f或A-F)的情况。
    对于找到的每个无效百分号,替换为 %25,即将其转义为合法的百分号字符。这是因为 %25 是字符 % 的有效编码形式。
  3. 解码 return decodeURIComponent(...):
    最后,调用 JavaScript 原生函数 decodeURIComponent() 对经过替换处理的字符串进行解码。这个函数会将合法的百分号编码转换回其原始字符。

功能概述

该函数的主要功能是:

  • 安全解码:在解码 URI 组件时,避免因无效的百分号编码导致的错误。
  • 处理特殊字符:通过将不合法的百分号替换为合法形式,使得解码过程更加稳健。

使用场景

在处理用户输入或从 API 接收数据时,URI 中可能包含无效的百分号编码。使用 decodeURIComponentSafe 可以确保在解码时不会因为这些无效字符而导致程序崩溃。

示例

假设我们有一个 URI 字符串:

let encodedString = "Hello%20World%ZZ"; // 无效编码 %ZZ
let decodedString = decodeURIComponentSafe(encodedString);
console.log(decodedString); // 输出: "Hello World%ZZ"

在这个例子中,函数能够处理无效编码并返回结果,而不是抛出错误。

在这里插入图片描述


http://www.lryc.cn/news/476056.html

相关文章:

  • 自由学习记录(18)
  • vue3-ref 和 reactive
  • Apache Calcite - 查询优化之自定义优化规则
  • 大型语言模型(LLM)的小型化研究进展
  • MiniWord
  • Netty 常见组件介绍
  • 高频电子线路---倍频器与振荡器
  • 删除 git submodule
  • el-table 多选默认选中(根据返回的id给数据加默认选中状态)
  • 境外网站翻译之自由职业
  • 批量图片转PDF文件的多种方法详解
  • Web服务器(理论)
  • js:()=>(,);()的作用:明确表达式的边界。
  • RSI 5G通信技术中用于标识小区的特定参数
  • JavaScript中的闭包、递归问题
  • 【青牛科技】GC4938替代A4938/Allegro在水泵、筋膜枪、吸尘器和电动工具中的应用
  • 基于yolov5的输电线,电缆检测系统,支持图像检测,视频检测和实时摄像检测功能(pytorch框架,python源码)
  • uniapp下载文件的方案,包括H5,App方案解决办法
  • c++ 贪心算法
  • 15分钟学 Go 第 35 天:Go的性能调优 (7000字详细教程)
  • 6、显卡品牌分类介绍:技嘉 - 计算机硬件品牌系列文章
  • Redis数据类型——针对实习面试
  • roberta融合模型创新中文新闻文本标题分类
  • 《密码系统设计》实验二 4-6学时
  • Zypher Network:全栈式 Web3 游戏引擎,服务器抽象叙事的引领者
  • 2025生物发酵展(济南)为生物制造产业注入新活力共谱行业新篇章
  • git入门教程14:Git与其他工具的集成
  • 在Zetero中调用腾讯云API的输入密钥的问题
  • 【AD】1-8 AD24软件工程创建
  • RT-Thread学习