问题描述
我需要获取此类 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);
但是使用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);
解决方法
看着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
的方法)