33

试试看:

encodeURIComponent("'@#$%^&");

如果你试试这个,你会看到除了单引号之外的所有特殊字符都被编码了。我可以使用什么函数对所有字符进行编码并使用 PHP 对其进行解码?

谢谢。

4

7 回答 7

55

我不确定您为什么要对它们进行编码。如果只想转义单引号,可以使用.replace(/'/g, "%27"). 但是,好的参考是:

于 2012-06-05T12:07:53.527 回答
9

您可以使用:

function fixedEncodeURIComponent (str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, escape);
}

fixedEncodeURIComponent("'@#$%^&");

检查参考: http: //mdn.beonex.com/en/JavaScript/Reference/Global_Objects/encodeURIComponent.html

于 2015-09-11T13:58:59.670 回答
2

只是尝试encodeURI()encodeURIComponent()你自己...

console.log(encodeURIComponent('@#$%^&*'));

输入:@#$%^&*。输出:%40%23%24%25%5E%26*。所以,等等,发生了什么事*?为什么没有转换?TLDR:您实际上想要fixedEncodeURIComponent()fixedEncodeURI()。很长的故事...

encodeURIComponent():不要使用。使用,如MDN文档fixedEncodeURIComponent()所定义和解释的,强调我的...encodeURIComponent()

为了更严格地遵守RFC 3986(保留 !、'、(、) 和 *),即使这些字符没有正式的 URI 分隔用途,也可以安全地使用以下内容:

function fixedEncodeURIComponent(str) { return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { return '%' + c.charCodeAt(0).toString(16); }); }

当我们讨论这个话题时,也不要使用encodeURI(). MDN 也有自己的重写,如MDNencodeURI()文档所定义。引用他们的解释...

如果希望遵循更新的 RFC3986 的 URL,它保留了方括号(用于 IPv6),因此在形成可能是 URL 一部分的内容(例如主机)时不进行编码,以下代码片段可能会有所帮助:

function fixedEncodeURI(str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); }

于 2020-06-17T19:01:19.863 回答
2

您可以使用btoa()and atob(),这将编码和解码给定的字符串,包括单引号。

于 2020-03-03T07:06:33.320 回答
1

我发现了一个从不错过任何字符的巧妙技巧。我告诉它替换一切,除了什么都没有。我这样做(URL编码):

function encode(w){return w.replace(/[^]/g,function(w){return '%'+w.charCodeAt(0).toString(16)})}

function encode(w){return w.replace(/[^]/g,function(w){return '%'+w.charCodeAt(0).toString(16)})}

loader.value = encode(document.body.innerHTML);
<textarea id=loader rows=11 cols=55>www.WHAK.com</textarea>

于 2015-07-26T12:44:44.857 回答
1

正如@Bergi 所写,您可以替换所有字符:

function encoePicture(pictureUrl)
{
 var map=
 {
          '&': '%26',
          '<': '%3c',
          '>': '%3e',
          '"': '%22',
          "'": '%27'
 };

 var encodedPic = encodeURI(pictureUrl);
 var result = encodedPic.replace(/[&<>"']/g, function(m) { return map[m];});
 return result;
}
于 2017-08-29T10:11:59.160 回答
0

最近的答案 (2021)

使用 JavaScript 的URLSearchParams

console.log(new URLSearchParams({ encoded: "'@#$%^&" }).toString())

于 2021-12-10T17:54:18.740 回答