- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道每个已知的浏览器都支持“decodeURIComponent
”,但我试图通过 polyfill 来更好地理解它。
Atob
、Btoa
有很多 polyfill……但出于某种原因,我没有找到任何用于“decodeURIComponent
”的 polyfill "有什么原因吗?
最佳答案
没有 polyfill 因为 decodeURIComponent
从 ES3 开始就得到支持。
本节"URI Handling Function Properties" EcmaScript 语言规范定义了解码 URI 的算法 (Decode
)。这是一个内部函数,由 decodeURI
调用。和 decodeURIComponent
.后两个函数实际上是 Decode
的简单包装器,仅在哪些字符被视为“保留”方面有所不同。 decodeURIComponent
很简单:没有保留字符。
我在这里根据这些规范实现了 Decode
和 decodeURIComponent
:
function Decode(string, reservedSet) {
const strLen = string.length;
let result = "";
for (let k = 0; k < strLen; k++) {
let chr = string[k];
let str = chr;
if (chr === '%') {
const start = k;
let byte = +`0x${string.slice(k+1, k+3)}`;
if (Number.isNaN(byte) || k + 2 >= strLen) throw new URIError;
k += 2;
if (byte < 0x80) {
chr = String.fromCharCode(byte);
str = reservedSet.includes(chr) ? string.slice(start, k + 1) : chr;
} else { // the most significant bit in byte is 1
let n = Math.clz32(byte ^ 0xFF) - 24; // Position of first right-most 10 in binary
if (n < 2 || n > 4) throw new URIError;
let value = byte & (0x3F >> n);
if (k + (3 * (n - 1)) >= strLen) throw new URIError;
for (let j = 1; j < n; j++) {
if (string[++k] !== '%') throw new URIError;
let byte = +`0x${string.slice(k+1, k+3)}`;
if (Number.isNaN(byte) || ((byte & 0xC0) != 0x80)) throw new URIError;
k += 2;
value = (value<<6) + (byte & 0x3F);
}
if (value >= 0xD800 && value < 0xE000 || value >= 0x110000) throw new URIError;
if (value < 0x10000) {
chr = String.fromCharCode(value);
str = reservedSet.includes(chr) ? string.slice(start, k + 1) : chr;
} else { // value is ≥ 0x10000
const low = ((value - 0x10000) & 0x3FF) + 0xDC00;
const high = (((value - 0x10000) >> 10) & 0x3FF) + 0xD800;
str = String.fromCharCode(high) + String.fromCharCode(low);
}
}
}
result += str;
}
return result;
}
function decodeURIComponent(encoded) {
return Decode(encoded.toString(), "");
}
// Demo
const test = "a€=#;🁚ñà😀x";
console.log("test: " + test);
const encoded = encodeURIComponent(test);
console.log("encoded: " + encoded);
const decoded = decodeURIComponent(encoded);
console.log("decoded: " + decoded);
关于javascript - 纯js中的decodeURIComponent Polyfill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53977714/
这个人我抓到了。他将字符串解码为可读的字符串。 decodeURIComponent("Invalid Ticker Name \u0027t\u0027 at line: 3") "Invalid
下面的代码片段:解码URIComponent(“MAR%2520SE%255EStruc%2520Fin%255EAs-Bad%2520Secies%2BRECH%20LANE%5EEnish”) 给
当我将以下内容发布到 Node 时(简化示例): var xhr = new XMLHttpRequest(); xhr.open("POST", "http://localhost:3000/act
我有这段代码,我找不到任何解释。当我在 google 上搜索 decodeURIComponent 时,它说它是 encodeURIComponent 的反向,但是,我在代码中的任何地方都找不到 en
我在解码转义的 JavaScript 字符串时遇到了一个奇怪的问题。 这是测试代码,从数据属性获取转义字符串不起作用,它只是原始打印出来。第二个示例运行良好。 var emailText = $('#
我在客户端使用 encodeURIComponent 对我的数据进行编码。 encodeURIComponent($('#...').val()), 如何在yaws服务器上解码? 最佳答案 http-
我的 grails View 中有一个参数,我将其传递给 javascript 代码 ${replacedString} var mydata = decodeURICo
我有我需要在 C++ 中解码的字符串 (uri),它必须是 js decodeURIComponent 函数这样这个字符串: http://external.ak.fbcdn.net/safe_ima
DecodeURIComponent 不支持少数编码组件 我正在restapi中以我的json中的公告格式发送JD。所以我对 jd 进行编码并发送。这可以正常工作,没有任何问题。但是当我尝试解码编码的
由于 unescape 已被弃用,我选择了 decodeURIComponent ,但它没有按预期工作。 decodeURIComponent 无法解码以下 URI 组件 Coast%20Guard%
当我在工作中处理一些奇怪的 JavaScript 代码时,我发现了这个: string = decodeURIComponent(encodeURIComponent(string)); 在我看来,这
我想解析 JSON 列表中的所有项目并使用函数解码,删除 HTML 格式的空格、%20 等。 请看下面的片段 我的目标: 我想将 Andy%2EPeters 更改为“Andy Peters” 我不想使
当我尝试使用 decodeURLCompnent 在 nodeJS 中解码下面的字符串时: var decoded = decodeURI('Ulysses%20Guimar%C3%A3es%20-%
在回答另一个问题时,我意识到我的 Javascript/DOM 知识已经有点过时了,因为我仍在使用 escape/unescape 对内容进行编码URL 组件,而现在看来我应该改用 encodeURI
JavaScript 函数 decodeURIComponent 和 decodeURI 有什么区别? 最佳答案 为了解释这两者之间的区别,让我解释一下 encodeURI 和 encodeURICo
如标题,我试过用encodeURI方法编码一个字符串,用decodeURIComponent方法解码结果。然后我发现解码字符串与原始字符串相同。所以我想知道是否所有字符串都用encodeURI 可以使
某些动态网络框架使用此代码片段 appSettings = JSON.parse( decodeURIComponent( "%7B%22setting1%22%3A%22foo%2
我使用 javascript 编码了一个 html 文本属性并将其传递到我的数据库中。我是说像“Wales&PALS”这样的字符串的 javascript encodeURIComponent(e.v
我有一个网络应用程序,带有一些下拉列表。其中一个列表包含一些带有重音符号的参数,例如:"Bonjour/COUCOU SPéCIALISTE/AB12345" 因此,当我选择它并进行研究时,我最终得到
我刚刚用 AJAX 测试了一些东西,我发现如果我发出警告就成功了 alert(decodeURI('%')); 或 alert(encodeURIComponent('%')); 浏览器出现以下代码错
我是一名优秀的程序员,十分优秀!