1 |
[37] [[URL]] で用いられている、 [CODE(char)[[[%]]]] と2桁の[[十六進数]]によって[[オクテット]]あるいは[[文字]]を表す表記法を[DFN[[RUBYB[パーセント符号化]@en[percent-encoding]]]]といいます。
|
2 |
|
3 |
;; [38] 以前は [DFN[URI [RUBYB[エスケープ]@en[escape]]]]、
|
4 |
[DFN[URL [RUBY[符号化][エンコーディング]@en[encoding]]]]などとも呼ばれていました。
|
5 |
|
6 |
* 大文字と小文字
|
7 |
|
8 |
[1]
|
9 |
[CITE[Bug in w3m-url-encode-string]] ([CODE[2007-05-11 13:00:36 +09:00]] 版) <http://emacs-w3m.namazu.org/ml/msg09323.html>
|
10 |
|
11 |
[[Webとの互換性]]のためには[[百分率符号化]]は[[大文字]]でなければならないらしい。
|
12 |
|
13 |
;; [[RFC 3986]] 的に[[大文字]]でなければならないというのは誤りで、
|
14 |
[[RFC 4234]] [[ABNF]] は[[大文字]]・[[小文字]]を区別しない。
|
15 |
|
16 |
([[名無しさん]] [WEAK[2007-05-11 11:19:59 +00:00]])
|
17 |
|
18 |
* 非予約文字の百分率符号化
|
19 |
|
20 |
[2]
|
21 |
最後の path segment が [CODE(URI)[%2E]]
|
22 |
または [CODE(URI)[%2E%2E]], [CODE(URI)[%2E.]],
|
23 |
[CODE(URI)[.%2E]] な[[相対参照]]について。
|
24 |
([[名無しさん]])
|
25 |
|
26 |
[3]
|
27 |
[CODE(HTMLe)@en[[[a]]]] [CODE(HTMLa)@en[[[href]]]] にそのような[[相対参照]]を指定した時の[[ステータス・バー]]または[[ツールチップ]]に表示される[[絶対URI参照]]は:
|
28 |
- [[Firefox]] 1.5、[[Opera]] 9: [[百分率符号化]]を解いたもの
|
29 |
([CODE(URI)[[[.]]]] や [CODE(URI)[[[..]]]])
|
30 |
- [[WinIE 6]]: [[百分率符号化]]されたまま
|
31 |
|
32 |
([[名無しさん]])
|
33 |
|
34 |
[4]
|
35 |
その[[リンク]]を[[かちっ]]たときに飛ばされる[[文書]]の [[URI]]
|
36 |
([[アドレス・バー]]の表示や [CODE(JS)@en[[[location]].[[href]]]]) は:
|
37 |
- [[Firefox]] 1.5、[[WinIE 6]]: [CODE(URI)[[VAR@ja[[[基底URI]]]]/%2E]] など、
|
38 |
[[百分率符号化]]のまま
|
39 |
- [[Opera]] 9: [CODE(URI)[[VAR@ja[[[基底URI]]]]/.]] など、
|
40 |
[[百分率符号化]]を解いた値
|
41 |
|
42 |
([[名無しさん]])
|
43 |
|
44 |
[5]
|
45 |
>>2 のような path segment が含まれるものの、最後の path
|
46 |
segment ではない[[相対参照]] (例えば [CODE(URI)[%2E/]])
|
47 |
([[名無しさん]])
|
48 |
|
49 |
[6]
|
50 |
>>5 [[ステータス・バー]]などの表示:
|
51 |
- [[Firefox]] 1.5、[[Opera]] 9: [CODE(URI)[[[.]]]] や
|
52 |
[CODE(URI)[[[..]]]] として解釈したときの[[絶対URI参照]]
|
53 |
- [[WinIE]] 6: [[百分率符号化]]されたまま、
|
54 |
特別な意味を持たないと解釈した時の[[絶対URI参照]]
|
55 |
|
56 |
([[名無しさん]])
|
57 |
|
58 |
[7]
|
59 |
>>5 飛ばされる [[URI]]:
|
60 |
- [[Firefox]] 1.5、[[Opera]] 9: 特別な意味を持つと解釈した時の[[絶対URI参照]]
|
61 |
- [[WinIE 6]]: [[百分率符号化]]されたまま、特別な意味を持たないと解釈した時の[[絶対URI参照]]
|
62 |
|
63 |
([[名無しさん]])
|
64 |
|
65 |
[8]
|
66 |
[[URI scheme]] [Q@en[[CODE(URI)@en[http]]]] の一部または全部が[[百分率符号化]]されている[[URI参照]]
|
67 |
([[名無しさん]])
|
68 |
|
69 |
[9]
|
70 |
>>8 表示、移動先とも、 [[Firefox]] 1.5、[[Opera]] 9、
|
71 |
[[WinIE 6]] のいずれも[[相対参照]]と解釈
|
72 |
([[名無しさん]])
|
73 |
|
74 |
[10]
|
75 |
[[ASCII]] [CODE(URI)@en[[[hostname]]]] の一部または全部が[[百分率符号化]]されている[[URI参照]]
|
76 |
|
77 |
([[名無しさん]])
|
78 |
|
79 |
[11]
|
80 |
>>10:
|
81 |
表示: [[Firefox]] 1.5、[[Opera]] 9、[[WinIE 6]] とも、
|
82 |
[[百分率符号化]]を解いたもの
|
83 |
([[名無しさん]])
|
84 |
|
85 |
[12]
|
86 |
>>10 移動先:
|
87 |
- [[Opera]] 9、[[WinIE 6]]: [[百分率符号化]]を解いた[[ホスト]]
|
88 |
- [[Firefox]] 1.5:
|
89 |
-- [CODE(URI)@en[[[.]]]] が[[百分率符号化]]されているなら、[[百分率符号化]]をすべて解いた[[ホスト]]
|
90 |
-- そうでないなら、[[百分率符号化]]されたままの[[ホスト]]
|
91 |
(見つからないというエラーになる)
|
92 |
|
93 |
([[名無しさん]])
|
94 |
|
95 |
[13]
|
96 |
[[ポート番号]]の一部または全部が[[百分率符号化]]されている場合:
|
97 |
表示、移動先とも:
|
98 |
- [[Opera]] 9、[[WinIE 6]]: [[百分率符号化]]を解いた[[ポート番号]]
|
99 |
- [[Firefox]] 1.5: [[百分率符号化]]を解かない状態で、最初の[[数字]]の連続
|
100 |
-- 例えば、 [CODE(URI)[%38%30]] なら [CODE[[[30]]]] と解釈する
|
101 |
|
102 |
([[名無しさん]])
|
103 |
|
104 |
[14]
|
105 |
テスト: <http://suika.fam.cx/~wakaba/-temp/test/uri/percent/unreserved/>
|
106 |
([[名無しさん]] [WEAK[2007-05-21 05:49:59 +00:00]])
|
107 |
|
108 |
|
109 |
[15]
|
110 |
[CITE@ja-JP[akr流(2007-02-22)]] ([[akr]] 著, [TIME[2007-02-26 17:00:01 +09:00]] 版) <https://www.codeblog.org/blog/akr/20070222.html>
|
111 |
|
112 |
* [CODE(URI)[%u]] 符号化
|
113 |
|
114 |
[36] [[ECMAScript]] によって導入された [CODE(URI)[[[%u]]]] [[符号化]]は、
|
115 |
[[URL]] での利用が認められたことはありませんが、現在でも稀に用いられます。
|
116 |
詳しくは [CODE(URI)[[[%u]]]] の項をご覧ください。
|
117 |
|
118 |
* CGI における取り扱い
|
119 |
|
120 |
[40] [[文字列]]を[[パーセント符号化]]する場合、 [CODE(ABNF)@en[[[reserved]]]] に含まれていない[[文字]]を[[符号化]]しては[['''なりません''']]
|
121 |
[SRC[>>39]]。
|
122 |
|
123 |
** 仕様書
|
124 |
|
125 |
[REFS[
|
126 |
- [39] [CITE@en[RFC 3875 - The Common Gateway Interface (CGI) Version 1.1]] ([TIME[2011-11-20 06:09:05 +09:00]] 版) <http://tools.ietf.org/html/rfc3875#section-2.3>
|
127 |
]REFS]
|
128 |
|
129 |
* メモ
|
130 |
|
131 |
[31] [CITE[IRC logs: freenode / #whatwg / 20091229]]
|
132 |
([TIME[2010-01-06 07:47:25 +09:00]] 版)
|
133 |
<http://krijnhoetmer.nl/irc-logs/whatwg/20091229>
|
134 |
|
135 |
[32] [CITE@en[XSLT 2.0 and XQuery 1.0 Serialization (Second Edition)]]
|
136 |
( ([TIME[2010-12-17 00:08:20 +09:00]] 版))
|
137 |
<http://www.w3.org/TR/2010/REC-xslt-xquery-serialization-20101214/#uri-escaping>
|
138 |
|
139 |
[33] [CITE@en[XSLT 2.0 and XQuery 1.0 Serialization (Second Edition)]]
|
140 |
( ([TIME[2010-12-17 00:08:20 +09:00]] 版))
|
141 |
<http://www.w3.org/TR/2010/REC-xslt-xquery-serialization-20101214/#XHTML_ESCAPE-URI-ATTRIBUTES>
|
142 |
|
143 |
[34] [CITE@en[Web Applications 1.0 r1835 Don't escape '%' when doing URL resolution. (bug 5802) (credit: hs)]]
|
144 |
( ([TIME[2008-07-01 08:52:00 +09:00]] 版))
|
145 |
<http://html5.org/tools/web-apps-tracker?from=1834&to=1835>
|
146 |
|
147 |
[35] [CITE@EN[XQuery 1.0 and XPath 2.0 Functions and Operators (Second Edition)]]
|
148 |
( ([TIME[2010-12-17 00:06:54 +09:00]] 版))
|
149 |
<http://www.w3.org/TR/2010/REC-xpath-functions-20101214/#func-encode-for-uri> |
150 |
|
151 |
[41] [CITE@en[Bug 24257 – "Percent-decoding + full-width characters + percent decoding" for domains is missing]] |
152 |
( ([TIME[2014-01-15 09:00:30 +09:00]] 版)) |
153 |
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=24257> |
154 |
|
155 |
[42] [CITE@en[309671 – Support %-escaped hostnames per RFC 3986 (3.2.2) / Cannot open IDN from other applications(e.g., from Thunderbird)]] |
156 |
( ([TIME[2014-01-15 09:02:05 +09:00]] 版)) |
157 |
<https://bugzilla.mozilla.org/show_bug.cgi?id=309671> |