微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从decodeURIencodeURIComponentoriginalString中恢复?

如何解决如何从decodeURIencodeURIComponentoriginalString中恢复?

  • 我有一些旧代码(预先反应),可以在https://www.npmjs.com/package/history模块上调用encodeURIComponent之前使用history.push()对URL的一部分进行编码,以便导航到该URL。
  • li>
  • history.push()内的history.js然后使用decodeURI部分解码整个URL(decodeURI仅解码encodeURI编码的相同字符)
  • 此部分解码的位置。路径名最终出现在ReactRouter中,其中useParams()再次给了我部分解码的URL组件。

现在,我陷入了无法使用的部分解码URL组件的困境。我需要将其完全解码。

我不能在部分解码的字符串上使用decodeURIComponent,因为原始字符串可能包含%在这种情况下,此%将已经在部分解码的字符串中解码这将导致decodeURIComponent崩溃并导致Uncaught URIError: URI malformed

我的选择似乎是:

  • 即使不鼓励使用unescape,也可以完全解码部分解码的字符串(它不会抱怨单个%)(为什么?)
  • 手动将所有%(后跟数字和后跟的十六进制字符)重新编码回%25,然后通过decodeURIComponent
  • 运行结果

有没有我想不到的丑陋解决方案?

编辑:有人问我有关部分确定的字符串的含义的示例

const original = 'A-Za-z0-9;,/?:@&=+$-_.!~*()#%';
const encodedURIComponent = encodeURIComponent(original); // "A-Za-z0-9%3B%2C%2F%3F%3A%40%26%3D%2B%24-_.!~*()%23%25"
console.log(decodeURIComponent(encodedURIComponent)); //  "A-Za-z0-9;,/?:@&=+$-_.!~*()#%"
const partiallyUnescaped = decodeURI(encodedURIComponent); // "A-Za-z0-9%3B%2C%2F%3F%3A%40%26%3D%2B%24-_.!~*()%23%" - notice the '%25' at the end was decoded back to '%'
console.log(unescape(partiallyUnescaped)); // "A-Za-z0-9;,/?:@&=+$-_.!~*()#%"
//console.log(decodeURIComponent(partiallyUnescaped)); // error

编辑2:如果可能有帮助,这是我们的URL可能包含的某些字符的更实际示例,但是由于它是用户生成的,因此可能确实是任何东西:

  console.log(                             encodeURIComponent('abcd+%;- efgh'))  ; // "abcd%2B%25%3B-%20efgh"
  console.log(                   decodeURI(encodeURIComponent('abcd+%; -efgh'))) ; // "abcd%2B%%3B- efgh"
//console.log(decodeURIComponent(decodeURI(encodeURIComponent('abcd+%; -efgh')))); // Error: URI malformed

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。