encodeURI()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
encodeURI() 颿°ã¯ãç¹å®ã®æåãããã®æåã® UTF-8 ã¨ã³ã³ã¼ãã表ã 1ï½4 ã¤ã®ã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã«ç½®ãæãã¦ãURI ãã¨ã³ã³ã¼ããã¾ãï¼2 ã¤ã®ãµãã²ã¼ãæåã§æ§æãããæåã®å ´åã¯ã 4 ã¤ã®ã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã®ã¿ã«ãªãã¾ãï¼ãencodeURIComponent() ã¨æ¯è¼ããã¨ããã®é¢æ°ã¯ã¨ã³ã³ã¼ãããæåã®æ°ãå°ãªããURI æ§æã®ä¸é¨ã§ããæåã¯ãã®ã¾ã¾æ®ãã¾ãã
試ãã¦ã¿ã¾ããã
const uri = "https://mozilla.org/?x=ÑеллÑ";
const encoded = encodeURI(uri);
console.log(encoded);
// äºæ³ãããçµæ: "https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"
try {
console.log(decodeURI(encoded));
// äºæ³ãããçµæ: "https://mozilla.org/?x=ÑеллÑ"
} catch (e) {
// Catches a malformed URI
console.error(e);
}
æ§æ
encodeURI(uri)
弿°
uri-
URI ã¨ãã¦ã¨ã³ã³ã¼ããããæååã§ãã
è¿å¤
æå®ãããæååã URI ã¨ãã¦ã¨ã³ã³ã¼ãããæ°ããæååã表ãã¾ãã
ä¾å¤
URIError-
uriã«å¤ç«ãµãã²ã¼ããå«ã¾ãã¦ããå ´åã«çºçãã¾ãã
解説
encodeURI() ã¯ãã°ãã¼ãã«ãªãã¸ã§ã¯ãã®é¢æ°ããããã£ã§ãã
encodeURI() 颿°ã¯ãUTF-8 ã³ã¼ãåä½ã§æåãã¨ã¹ã±ã¼ãããããããã®ãªã¯ãããã %XX ã®æ¸å¼ã§ã¨ã³ã³ã¼ãããå¿
è¦ã«å¿ãã¦å·¦å´ã« 0 ãè£ãã¾ããUTF-16 ã®å¤ç«ãµãã²ã¼ãã¯ãæå¹ãª Unicode æåãã¨ã³ã³ã¼ãããªããããencodeURI() ã« URIError ãçºçããã¾ãã
encodeURI() ã¯ã以ä¸ã®æåãé¤ããã¹ã¦ã®æåãã¨ã¹ã±ã¼ããã¾ãã
AâZ aâz 0â9 - _ . ! ~ * ' ( ) ; / ? : @ & = + $ , #
2 è¡ç®ã®æå㯠URI æ§æã®ä¸é¨ã§ããå¯è½æ§ã®ããæåã§ãããencodeURIComponent() ã«ãã£ã¦ã®ã¿ã¨ã¹ã±ã¼ãããã¾ããencodeURI() 㨠encodeURIComponent() ã¯ã©ã¡ããããéäºç´ãã¼ã¯ãã¨ãã¦ç¥ããã -.!~*'() ã¨ããæåãã¨ã³ã³ã¼ããã¾ããããããã®æåã¯äºç´ãããç¨éã¯æã£ã¦ãã¾ããããURI ã§ã¯ããã®ã¾ã¾ã使ç¨ãããã¨ãã§ãã¾ããï¼RFC2396 ãåç
§ãã¦ãã ãããï¼
encodeURI() 颿°ã¯ãURI ã«å¯¾ãã¦ç¹å¥ãªæå³ãæã¤æåï¼äºç´æåï¼ã¯ã¨ã³ã³ã¼ããã¾ãããæ¬¡ã®ä¾ã¯ãURI ã«å«ã¾ããå¯è½æ§ã®ãããã¹ã¦ã®é¨åã示ãã¦ãã¾ããç¹å®ã®æåãç¹å¥ãªæå³ã表ãããã«ä½¿ç¨ããã¦ãããã¨ã«æ³¨æãã¦ãã ããã
http://username:password@www.example.com:80/path/to/file.php?foo=316&bar=this+has+spaces#anchor
encodeURI ã¯ããã®ååã示ãã¨ãããURL ããã§ã«æ£ããå½¢å¼ã§ããã¨ä»®å®ãã¦ãURL å
¨ä½ãã¨ã³ã³ã¼ãããããã«ä½¿ç¨ãã¾ããæååã®å¤ãåçã« URL ã«çµã¿ç«ã¦ããå ´åã¯ãä¸è¦ãªå ´æã« URL æ§ææåãå
¥ããªãããã«ãããããã®åçã»ã°ã¡ã³ãã« encodeURIComponent() ã使ç¨ãããã¨ããå§ããã¾ãã
const name = "Ben & Jerry's";
// This is bad:
const link = encodeURI(`https://example.com/?choice=${name}`); // "https://example.com/?choice=Ben%20&%20Jerry's"
console.log([...new URL(link).searchParams]); // [['choice', 'Ben '], [" Jerry's", '']
// Instead:
const link = encodeURI(
`https://example.com/?choice=${encodeURIComponent(name)}`,
);
// "https://example.com/?choice=Ben%2520%2526%2520Jerry's"
console.log([...new URL(link).searchParams]); // [['choice', "Ben%20%26%20Jerry's"]]
ä¾
>encodeURI() 㨠encodeURIComponent()
encodeURI() ã¯ä»¥ä¸ã®ããã« encodeURIComponent() ã¨ã¯ç°ãªãã¾ãã
const set1 = ";/?:@&=+$,#"; // äºç´æå
const set2 = "-.!~*'()"; // äºç´ããã¦ããªãè¨å·
const set3 = "ABC abc 123"; // è±æ°å + 空ç½
console.log(encodeURI(set1)); // ;/?:@&=+$,#
console.log(encodeURI(set2)); // -.!~*'()
console.log(encodeURI(set3)); // ABC%20abc%20123 (空ç½ã¯ %20 ã«ã¨ã³ã³ã¼ãããã)
console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24%23
console.log(encodeURIComponent(set2)); // -.!~*'()
console.log(encodeURIComponent(set3)); // ABC%20abc%20123 (空ç½ã¯ %20 ã«ã¨ã³ã³ã¼ãããã)
åç¬ã®ãµãã²ã¼ãæåã®ã¨ã³ã³ã¼ã
ãµãã²ã¼ããã¢ã«ãªã£ã¦ããªã 1 åã®ãµãã²ã¼ãæåãã¨ã³ã³ã¼ããããã¨ãã㨠URIError ãçºçãããã¨ã«æ³¨æãã¦ãã ãããä¾ãã°ã
// ãµãã²ã¼ããã¢ã¯ OK
console.log(encodeURI("\uD800\uDFFF"));
// ä¸ä½ãµãã²ã¼ãã®ã¿ã 㨠"URIError: malformed URI sequence" ã¨ã©ã¼ãçºç
console.log(encodeURI("\uD800"));
// ä¸ä½ãµãã²ã¼ãã®ã¿ã 㨠"URIError: malformed URI sequence" ã¨ã©ã¼ãçºç
console.log(encodeURI("\uDFFF"));
ãã®ã¨ã©ã¼ãé¿ããã«ã¯ãå¤ç«ãµãã²ã¼ãã Unicode ç½®ææå (U+FFFD) ã«ç½®ãæãã String.prototype.toWellFormed() ã使ç¨ãããã¨ãã§ãã¾ããã¾ããæååã encodeURI() ã«æ¸¡ãåã«ããã®æååã«å¤ç«ãµãã²ã¼ããå«ã¾ãã¦ãããã©ããã調ã¹ãã«ã¯ãString.prototype.isWellFormed() ã使ç¨ãããã¨ãã§ãã¾ãã
RFC3986 ã®ã¨ã³ã³ã¼ã
æè¿ã® RFC3986 ã§ã¯ãè§æ¬å¼§ã¯ï¼IPv6 ç¨ã®ï¼äºç´æåã¨ãªã£ã¦ãããããè§æ¬å¼§ãï¼ãã¹ãåãªã©ï¼ URL ã®ä¸é¨ãå½¢æãã¦ããå ´åã¯ã¨ã³ã³ã¼ãããã¦ããªãã»ããããã§ããããã¾ããURI ã®åºåãæåã¨ãã¦æ£å¼ã«ä½¿ç¨ããã¦ããªã !, ', (, ), * ãäºç´æåã¨ãã¦äºç´ããã¦ãã¾ããæ¬¡ã®é¢æ°ã¯ãRFC3986 æºæ ã® URL æ¸å¼ã«æååãã¨ã³ã³ã¼ããã¾ãã
function encodeRFC3986URI(str) {
return encodeURI(str)
.replace(/%5B/g, "[")
.replace(/%5D/g, "]")
.replace(
/[!'()*]/g,
(c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,
);
}
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-encodeuri-uri> |