用于获取字符串长度的 unescape 函数的替代方法

问题描述

我需要获取此类 URL 的实际字符串长度“fair-and-handsome-men-instant-fairness-face-wash-50g--%E5%9C%A8%E5%8D%8E%E7% BE%8E%E4%BC%81%E5%A4%84%E5%A2%83%E8%89%B0%E9%9A%BE%EF%BC%8C%E9%A9%AC%E6%96% AF%E5%85%8B%E5%8F%91%E5%8A%A8%E9%AD%85%E5%8A%9B%E6%94%BB%E5%8A%BF%E8%83%BD% E5%90%A6%E5%A5%8F%E6%95%88"

var str =  'fair-and-handsome-men-instant-fairness-face-wash-50g--%E5%9C%A8%E5%8D%8E%E7%BE%8E%E4%BC%81%E5%A4%84%E5%A2%83%E8%89%B0%E9%9A%BE%EF%BC%8C%E9%A9%AC%E6%96%AF%E5%85%8B%E5%8F%91%E5%8A%A8%E9%AD%85%E5%8A%9B%E6%94%BB%E5%8A%BF%E8%83%BD%E5%90%A6%E5%A5%8F%E6%95%88';

console.log(str.length);
上面的代码片段结果是 252.

但是使用javascript的unescape方法,实际结果应该是120。但不幸的是 unescape 已被弃用但仍在工作。替代方法工作正常,但没有得到实际长度。

  var str =  'fair-and-handsome-men-instant-fairness-face-wash-50g--%E5%9C%A8%E5%8D%8E%E7%BE%8E%E4%BC%81%E5%A4%84%E5%A2%83%E8%89%B0%E9%9A%BE%EF%BC%8C%E9%A9%AC%E6%96%AF%E5%85%8B%E5%8F%91%E5%8A%A8%E9%AD%85%E5%8A%9B%E6%94%BB%E5%8A%BF%E8%83%BD%E5%90%A6%E5%A5%8F%E6%95%88';

 console.log(unescape((str)).length);

任何人都可以获得 unescape 的替代解决方案? 谢谢

解决方法

看着https://www.w3schools.com/jsref/jsref_unescape.asp 它说:

unescape() 函数在 JavaScript 1.5 版中已弃用。采用 decodeURI() 或 decodeURIComponent() 代替。

而且 decodeURIComponent 似乎在您的示例数据上运行良好。

,

您可以使用正则表达式来匹配编码的 % 字符或任何其他字符:

var str =  'fair-and-handsome-men-instant-fairness-face-wash-50g--%E5%9C%A8%E5%8D%8E%E7%BE%8E%E4%BC%81%E5%A4%84%E5%A2%83%E8%89%B0%E9%9A%BE%EF%BC%8C%E9%A9%AC%E6%96%AF%E5%85%8B%E5%8F%91%E5%8A%A8%E9%AD%85%E5%8A%9B%E6%94%BB%E5%8A%BF%E8%83%BD%E5%90%A6%E5%A5%8F%E6%95%88';
console.log(str.match(/%\w\w|./g).length);

根本不需要解码或编码(我没有看到以产生理想的 120 而不是 72 的方式使用 decodeURI 的方法)