Baseline Widely available
encodeURIComponent()
彿°éè¿å°ç¹å®åç¬¦çæ¯ä¸ªå®ä¾æ¿æ¢æä»£è¡¨å符ç UTF-8 ç¼ç çä¸ä¸ªã两个ãä¸ä¸ªæå个转ä¹åºåæ¥ç¼ç URIï¼åªæç±ä¸¤ä¸ªâ代çâåç¬¦ç»æçå符ä¼è¢«ç¼ç 为å个转ä¹åºåï¼ãä¸ encodeURI()
ç¸æ¯ï¼æ¤å½æ°ä¼ç¼ç æ´å¤çå符ï¼å
æ¬ URI è¯æ³çä¸é¨åã
// Encodes characters such as ?,=,/,&,:
console.log(`?x=${encodeURIComponent("test?")}`);
// Expected output: "?x=test%3F"
console.log(`?x=${encodeURIComponent("ÑеллÑ")}`);
// Expected output: "?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"
è¯æ³ åæ°
uriComponent
ä¸ä¸ª stringãnumberãbooleanãnullï¼undefined æè ä»»ä½ objectãå¨ç¼ç ä¹åï¼uriComponent åæ°ä¼è¢«è½¬å为å符串ã
åå串ä½ä¸º URI ç»æé¨å被被ç¼ç åçæ°å符串ã
æè¿°encodeURIComponent
转ä¹é¤äºå¦ä¸æç¤ºå¤çææå符ï¼
ä¸è½¬ä¹çåç¬¦ï¼ A-Z a-z 0-9 - _ . ! ~ * ' ( )
encodeURIComponent()
å encodeURI
æä»¥ä¸å 个ä¸åç¹ï¼
var set1 = ";,/?:@&=+$"; // ä¿çå符
var set2 = "-_.!~*'()"; // ä¸è½¬ä¹å符
var set3 = "#"; // æ°åæ å¿
var set4 = "ABC abc 123"; // 忝æ°åå符åç©ºæ ¼
console.log(encodeURI(set1)); // ;,/?:@&=+$
console.log(encodeURI(set2)); // -_.!~*'()
console.log(encodeURI(set3)); // #
console.log(encodeURI(set4)); // ABC%20abc%20123 (ç©ºæ ¼è¢«ç¼ç 为 %20)
console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24
console.log(encodeURIComponent(set2)); // -_.!~*'()
console.log(encodeURIComponent(set3)); // %23
console.log(encodeURIComponent(set4)); // ABC%20abc%20123 (ç©ºæ ¼è¢«ç¼ç 为 %20)
注æï¼å¦æè¯å¾ç¼ç ä¸ä¸ªéé« - ä½ä½å®æ´ç代çå符ï¼å°ä¼æåºä¸ä¸ª URIError
é误ï¼ä¾å¦ï¼
// é«ä½ä½å®æ´
alert(encodeURIComponent("\uD800\uDFFF"));
// åªæé«ä½ï¼å°æåº"URIError: malformed URI sequence"
alert(encodeURIComponent("\uD800"));
// åªæä½ä½ï¼å°æåº"URIError: malformed URI sequence"
alert(encodeURIComponent("\uDFFF"));
为äºé¿å
æå¡å¨æ¶å°ä¸å¯é¢ç¥ç请æ±ï¼å¯¹ä»»ä½ç¨æ·è¾å
¥çä½ä¸º URI é¨åçå
å®¹ä½ é½éè¦ç¨ encodeURIComponent è¿è¡è½¬ä¹ãæ¯å¦ï¼ä¸ä¸ªç¨æ·å¯è½ä¼è¾å
¥"Thyme &time=again
"ä½ä¸ºcomment
åéçä¸é¨åã妿ä¸ä½¿ç¨ encodeURIComponent 对æ¤å
容è¿è¡è½¬ä¹ï¼æå¡å¨å¾å°çå°æ¯comment=Thyme%20&time=again
ã请注æï¼"&"符å·å"="符å·äº§çäºä¸ä¸ªæ°çé®å¼å¯¹ï¼æä»¥æå¡å¨å¾å°ä¸¤ä¸ªé®å¼å¯¹ï¼ä¸ä¸ªé®å¼å¯¹æ¯comment=Thyme
ï¼å¦ä¸ä¸ªåæ¯time=again
ï¼ï¼è䏿¯ä¸ä¸ªé®å¼å¯¹ã
å¯¹äº application/x-www-form-urlencoded
(POST) è¿ç§æ°æ®æ¹å¼ï¼ç©ºæ ¼éè¦è¢«æ¿æ¢æ '+'ï¼æä»¥éå¸¸ä½¿ç¨ encodeURIComponent
çæ¶åè¿ä¼æ "%20" æ¿æ¢ä¸º "+"ã
ä¸ºäºæ´ä¸¥æ ¼çéµå¾ª RFC 3986ï¼å®ä¿ç !, ', (, ), å *ï¼ï¼å³ä½¿è¿äºåç¬¦å¹¶æ²¡ææ£å¼åå® URI çç¨éï¼ä¸é¢è¿ç§æ¹å¼æ¯æ¯è¾å®å ¨çï¼
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
return "%" + c.charCodeAt(0).toString(16).toUpperCase();
});
}
示ä¾
ä¸é¢è¿ä¸ªä¾åæä¾äº UTF-8 ä¸ Content-Disposition
å Link
çæå¡å¨ååºå¤´ä¿¡æ¯çåæ°ï¼ä¾å¦ UTF-8 æä»¶å)ï¼
var fileName = "my file(2).txt";
var header =
"Content-Disposition: attachment; filename*=UTF-8''" +
encodeRFC5987ValueChars(fileName);
console.log(header);
// è¾åº "Content-Disposition: attachment; filename*=UTF-8''my%20file%282%29.txt"
function encodeRFC5987ValueChars(str) {
return (
encodeURIComponent(str)
// 注æï¼å°½ç®¡ RFC3986 ä¿ç "!"ï¼ä½ RFC5987 并没æ
// æä»¥æä»¬å¹¶ä¸éè¦è¿æ»¤å®ã
.replace(/['()]/g, escape) // i.e., %27 %28 %29
.replace(/\*/g, "%2A")
// ä¸é¢ç并䏿¯ RFC5987 ä¸ URI ç¼ç å¿
é¡»ç
// æä»¥å¯¹äº |`^ è¿ 3 个å符æä»¬å¯ä»¥ç¨ç¨æé«ä¸ç¹å¯è¯»æ§
.replace(/%(?:7C|60|5E)/g, unescape)
);
}
// 以䏿¯ä¸è¿°åè½çæ¿æ¢æ¹æ¡
function encodeRFC5987ValueChars2(str) {
return (
encodeURIComponent(str)
// 注æï¼å°½ç®¡ RFC3986 ä¿ç "!"ï¼ä½ RFC5987 并没æï¼
// æä»¥æä»¬å¹¶ä¸éè¦è¿æ»¤å®ã
.replace(/['()*]/g, (c) => "%" + c.charCodeAt(0).toString(16)) // i.e., %27 %28 %29 %2a (请注æï¼"*" çææç¼ç æ¯ %2A
// è¿éè¦è°ç¨ toUpperCase() æ¹æ³æ¥æ£ç¡®ç¼ç )
// 以ä¸å¹¶ä¸æ¯ RFC5987 ç¼ç æå¿
é¡»çï¼
// è¿æ ·æä»¬å¯ä»¥è®© |`^ å¨ç½ç»ä¸è·åæ´å¥½çå¯è¯»æ§
.replace(/%(7C|60|5E)/g, (str, hex) =>
String.fromCharCode(parseInt(hex, 16)),
)
);
}
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4