<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</anchor> <dfn><code class="MIME">multipart/form-data</code></dfn>
は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームの提出</anchor>で使われる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ形式</anchor>です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/x-www-form-urlencoded</anchor></code> と並んで <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor>
<code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">POST</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>で最もよく用いられる <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</anchor>の1つです。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">パーセント符号化</anchor>を使う
<code class="MIME" xml:lang="en">application/x-www-form-url-encoded</code>
では扱いづらい<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor> (<code class="HTML">&lt;input type=file&gt;</code>) の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">フォーム提出</title></anchor>のために開発されましたが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>を扱わない場合にも使われています。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> <strong><cite xml:lang="en">RFC 7578 - Returning Values from Forms: multipart/form-data</cite> (<time>2015-07-19 23:17:07 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7578">https://tools.ietf.org/html/rfc7578</anchor-external></strong><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="145" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[145]</anchor-end> <cite xml:lang="en">RFC 7578 - Returning Values from Forms: multipart/form-data</cite> (<time>2015-07-19 23:17:07 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7578#section-4.2">https://tools.ietf.org/html/rfc7578#section-4.2</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="72" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[72]</anchor-end> <cite xml:lang="en">RFC 7578 - Returning Values from Forms: multipart/form-data</cite> (<time>2015-07-19 23:17:07 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7578#section-4.3">https://tools.ietf.org/html/rfc7578#section-4.3</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="165" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[165]</anchor-end> <cite xml:lang="en">RFC 7578 - Returning Values from Forms: multipart/form-data</cite> (<time>2015-07-19 23:17:07 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7578#section-4.4">https://tools.ietf.org/html/rfc7578#section-4.4</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> <cite xml:lang="en">RFC 7578 - Returning Values from Forms: multipart/form-data</cite> (<time>2015-07-19 23:17:07 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7578#section-4.5">https://tools.ietf.org/html/rfc7578#section-4.5</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="70" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[70]</anchor-end> <cite xml:lang="en">RFC 7578 - Returning Values from Forms: multipart/form-data</cite> (<time>2015-07-19 23:17:07 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7578#section-5.1.3">https://tools.ietf.org/html/rfc7578#section-5.1.3</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="177" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[177]</anchor-end> <cite xml:lang="en">RFC 7578 - Returning Values from Forms: multipart/form-data</cite> (<time>2015-07-19 23:17:07 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7578#section-5.2">https://tools.ietf.org/html/rfc7578#section-5.2</anchor-external></li></ul></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="103" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[103]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2012-03-19 22:29:46 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.whatwg.org/specs/web-apps/current-work/#attr-fs-enctype">http://www.whatwg.org/specs/web-apps/current-work/#attr-fs-enctype</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="105" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[105]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2012-03-19 22:29:46 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.whatwg.org/specs/web-apps/current-work/#form-submission-algorithm">http://www.whatwg.org/specs/web-apps/current-work/#form-submission-algorithm</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="109" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[109]</anchor-end> <strong><cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2012-03-19 22:29:46 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.whatwg.org/specs/web-apps/current-work/#multipart-form-data">http://www.whatwg.org/specs/web-apps/current-work/#multipart-form-data</anchor-external></strong></li></ul></refs></section><section><h1>意味</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="157" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[157]</anchor-end> <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームデータ集合</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>のための構文です。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームデータ集合</anchor>を参照。</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="158" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[158]</anchor-end> 理論上は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> の仕組みにより、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> 
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームデータ集合</anchor>よりも多くのものを表現できることになっています。
実用上は、それを逸脱したものはほとんど使われることはなく、
使われるとしても<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">相互運用性</anchor>の問題につながるだけです。</comment-p></section><section><h1>構文</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> 基本的には、 <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code> と同じ書式です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2046</anchor>, HTML 4 17.13.4.2, RFC 2388 3.</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="159" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[159]</anchor-end> つまり<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界文字列</anchor>などで区切られた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>の列です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="160" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[160]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界文字列</anchor>は、 <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>の
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>によって表されます。
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">必須</anchor>です <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;43</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">これは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体</anchor>に対応する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>、つまり <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> で送信する場合は
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPヘッダー</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">電子メール</anchor>で送信する場合は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">電子メール</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メッセージヘッダー</anchor>の
<code xmlns="http://www.w3.org/1999/xhtml" class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code> に指定する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>です。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>ではありません。</comment-p><section><h1>前書き、後書き</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="79" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[79]</anchor-end> どのブラウザも、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">前書き</anchor>も<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">後書き</anchor>も<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空</anchor>にします。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> が複数のファイルを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>する場合に使う <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code>
についてもそうです。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の場合のみ調べました。)
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p></section><section><h1>境界文字列</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界文字列</anchor> (<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</anchor></code>) はデータ中に現れてはなりません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2, RFC 2388 4.1</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="89" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[89]</anchor-end> どのブラウザも、 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">quoted-string</anchor>
ではなく、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">token</anchor> として表現しています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> の例:<pre class="MIME example code">boundary=---------------------------105742468821884</pre></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> の例:<pre class="MIME example code">boundary=----------ByrdxQC7rqEXna35oMxxa7</pre></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Safari</anchor> の例:<pre class="MIME example code">boundary=----WebKitFormBoundaryAAEEAAYDAACjAAHf</pre></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE</anchor> の例:<pre class="MIME example code">boundary=---------------------------7d839d460bd2</pre></p><history xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="124" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[124]</anchor-end> 古の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Netscape Navigator</anchor> は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>を含めない不具合があったようです。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">ひどいですね・・・。</comment-p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="129" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[129]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI.pm</anchor> によれば、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MacIE</anchor> の 3.01 と 3.02、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DreamPassport</anchor> には<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">境界文字列</anchor>の前に
<code class="MIME">--</code> を含めない不具合があったようです。</p></history></section><section><h1>transport-padding</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="125" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[125]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> の規定によれば、境界文字列のある行の最後には任意個の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>が挿入されることがあり、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>はこれを無視して解釈しなければなりません。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="126" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[126]</anchor-end> これは生成することは認められていませんが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メール</anchor>では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">転送路</anchor>の途中で追加されることがあり得たためそのような規定になっています。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="127" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[127]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>がこれに対応しているかは怪しいです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="128" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[128]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perlモジュール</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP::Body</anchor> はこれに対応していないようです。ほどほどよく使われているモジュールのようなので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web互換性</anchor>のためには必要ないということでしょう。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="130" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[130]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI.pm</anchor> はコードが酷くてよくわからないのですが (実際に試してみたらいいのでしょうが・・・)、
処理がいいかげんなのでたまたま対応できてるようにも見えます。</comment-p></section><section><h1>改行</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> MIME の規定により、境界行や実体頭欄の末端の改行は <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</anchor></code> 
でなければなりません。 <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CR</anchor></code> や <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LF</anchor></code> 
だけではいけません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> 他のすべての MIME 転送同様、改行は <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</anchor></code> とします
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2</src>。
と HTML 4 も言っています。 (<q>転送</q>とはどこからどこまでか、
曖昧であるのが問題ではありますが。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;8</anchor-internal> は大前提なんですが、
一方で HTTP ではいい加減な実装が多いので、もしかしたら・・・ <code class="char">CR</code>
だけとか <code class="char">LF</code> だけとかで送ってくる糞
UA もあったりするんでしょうか?</p><p>多分 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Mozilla</anchor> とか <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor>
とか <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IE</anchor> とかの有名どころは大丈夫だと思うんですが。。。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="60" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[60]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MacIE</anchor> 5.2 には <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</anchor></code> のところの改行の
<code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CR</anchor></code> が一部欠落してしまう不具合があるそうです。</p><p><cite>MacのIEでのmultipart/form-dataデータ</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://kvasir.skirnir.net/software/software00009.ksd">http://kvasir.skirnir.net/software/software00009.ksd</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="68" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[68]</anchor-end> 主要ブラウザは <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> としての<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">改行</anchor>をすべて 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</anchor> と正しく送信するようです。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>本体部分の個数と順序</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="65" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[65]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>の個数に特に制限は設けられていないようです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> 
フォームの各欄は、応用とフォームによって定義された順で、
それぞれ <code class="MIME">multipart/form-data</code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>とします。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2388 4.1</src> 本体部分の順序は、 RFC 2388
では規定されていません。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2388 5.5</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end>
HTML の場合、<code class="MIME">multipart/form-data</code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>は、それぞれ、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">成功</anchor>制御子に対応します。順序は制御子の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書順</anchor>とします。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="180" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[180]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム</anchor>で順序が規定されている場合は、そのまま送る<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べきです</strong></anchor>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="177" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;177</anchor-internal></src>。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">中間器</anchor>は入れ替えては<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="177" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;177</anchor-internal></src>。</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">空の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームデータ集合</anchor>の場合</ed></section><section><h1>本体部分のヘッダー</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="91" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[91]</anchor-end> どのブラウザも、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>に使う可能性のある<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">頭欄</anchor>は
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code> と <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition:</anchor></code>
だけのようです。他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">頭欄</anchor>は見たことがありません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="161" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[161]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">電子メール</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>ではなく、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>です。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="146" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[146]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>には、 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition:</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disposition型</anchor> <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form-data</anchor></code>
を指定しなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>。 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>もなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="145" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;145</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="162" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[162]</anchor-end> <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>には、更に
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>も指定できます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="163" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[163]</anchor-end> 他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>が使われるのは見たことがありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="174" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[174]</anchor-end> <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code>、<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition:</anchor></code>、
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Transfer-Encoding:</anchor></code> 以外の <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>を含めては<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>。無視しなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;43</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="164" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[164]</anchor-end> 各<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>の用法は、次節以降を参照。</p></section><section><h1>欄名 (制御子名)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> 各欄は名前を持ちます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="182" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[182]</anchor-end> 同名の欄が複数含まれることもあります。
同名の欄をまとめては<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="177" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;177</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="178" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[178]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2388</anchor> は次のように規定していました。名前はフォーム内で固有です。
<src>RFC 2388 3.</src> 欄名が同じ本体部分が複数あるときの取扱いは
RFC 2388 では規定されていません。 <src>RFC 2388 5.</src>
このような規定は、当時からまったく現実を反映していませんでした。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="179" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[179]</anchor-end> 各本体部分は、 <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition</anchor></code>
を <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form-data</anchor></code> とし、その <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</anchor></code>
引数に対応する制御子の欄名 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">制御子名</anchor>) を指定します
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2, RFC 2388 3.</src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> 詳しくは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">制御子名</anchor>も参照。</comment-p></section><section><h1>ファイル情報 (ファイル名など)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="147" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[147]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の内容を表す場合は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>の <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>の
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル名</anchor>を指定する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べきです</strong></anchor>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="145" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;145</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="148" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[148]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル名</anchor>を取得できない場合や意味が無い場合もあるので、
必須ではありません <src><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="145" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;145</anchor-internal></src>。</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="149" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[149]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非ASCII文字</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>の深刻な問題については、
<code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>の項を参照。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> フォーム・ソフトウェアは、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>にファイル名やその他のファイルの属性情報をつけても構いません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2388 4.4</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> HTML UA は提出する各ファイルにファイル名を供給するよう試みるべきです。
ファイル名は <code class="MIME">Content-Disposition</code> 欄の
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> 引数で指定します。<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end>
提出するファイルは相互にファイル名で参照関係を持っているかもしれませんから、
ファイル名が保存されていると便利です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2, RFC 2388 4.4</src></p><p>ファイル名指定に関する様々な問題については、
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> 引数の説明をご覧ください。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="71" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[71]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フルパス名</anchor>を値に使います。他のブラウザは狭義の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル名</anchor>だけを値に使います。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="74" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[74]</anchor-end> どのブラウザでも、 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> は必ず
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</anchor></code> の後に来るようです。
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form-data</anchor></code> と <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>と
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>の3つだけで、他の情報は付与しないみたいです。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="131" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[131]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perlモジュール</anchor> <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP::Body</anchor></code> は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>の有無によりある<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体本体</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>かどうか判断します。たとえ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空文字列</anchor>であっても、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>なら<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル名</anchor>が必要です。</p></section><section><h1>MIME 型</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> ほかのすべての <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/<var xmlns="http://www.w3.org/1999/xhtml">*</var></anchor></code> 型と同様、
各本体部分は省略可能 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="165" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;165</anchor-internal></src> な <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor></code>
頭欄を持ちます。省略時の既定値は <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">text/plain</anchor></code> です <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="165" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;165</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="166" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[166]</anchor-end> 媒体型が分かっている場合は適当に札付けし、分からない場合は
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/octet-stream</anchor></code> とする<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べき</strong></anchor>です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2, RFC 2388 3., RFC 2388 4.1, RFC 2388 4.2, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="165" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;165</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="76" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[76]</anchor-end> どのブラウザも、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の場合はその<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">媒体型</anchor>を
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor>:</code> 欄として指定し、
それ以外の場合は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor>:</code> 欄を省略します。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="77" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[77]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の場合、どのブラウザも、 
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(おそらく<anchor>拡張子</anchor>やシステムの、またはブラウザ内蔵の対応表を使って)</weak>
ファイルの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">媒体型</anchor>を推定できればその値を、できなければ
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/octet-stream</anchor></code> を使うようです。
確認できた限りでは <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor></code> も含めて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>を指定することはありませんでした。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p></section><section><h1>文字コード</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="84" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[84]</anchor-end> どのブラウザも、すべての<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体本体</anchor>、 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>、
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>に同じ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor> を使うようです。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="85" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[85]</anchor-end> 使用することに決めた <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor> で表現できない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>がある場合、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> における<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号位置</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">十進数文字参照</anchor>形式にしたものが代わりに挿入されます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="175" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[175]</anchor-end> ただし、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テキストファイル</anchor>であっても無変換です。</comment-p><history xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="86" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[86]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> は以前は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> 自体の
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor>:</code> 欄に <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>を指定していましたが (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal>)、
互換性に難があったのか、現在はつけないようです。
他のブラウザも <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> 自体には
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>だけしか指定しません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="168" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[168]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームデータ</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テキスト</anchor>の時は、その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>の
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">text/plain</anchor></code>
の <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字符号化</anchor>を提示できます <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="169" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[169]</anchor-end> しかし実際には広く使われている実装は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>を指定しません <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE</anchor> も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Mozilla</anchor> も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> も、 <code class="MIME">multipart/form-data</code> 
に含まれる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charsetパラメーター</anchor>を付けてくれません。 
(ファイル送信を除いて <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor></code> 欄そのものをつけません。)</p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="167" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[167]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML4</anchor> は、 HTML <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UA</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>の <code class="MIME">Content-Type</code> 欄を
(<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor></code> 引数を含めて) 供給するべき
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2</src> と述べていました。しかし誰もそれに従っていませんでした。</p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Presto</anchor>) は、 <code class="MIME">multipart/form-data</code> そのものに (存在しない)
<code class="MIME">charset</code> 引数をつけてきます。
この charset 値は実際にはそれに含まれる本体部分の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体本体</anchor>及び 
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition</anchor></code> 欄の <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</anchor></code> 
引数に適用されるようです。あ、 <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> にもかな? 
今度確かめてみよう。</p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal>-3 の情報は、 <code class="HTML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">file</anchor></code> 
として送られる実体本体には適用できません。 (その実体の頭欄には適用されます。)
<code class="MIME">charset=<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unknown-8bit</anchor></code> とでも考えるしかなさそうです。問題は、
一般の form data と file を区別する確実な方法がないことです。 
IE, Moz, Opera に限れば、 <code class="MIME">filename</code> 引数の有無で決定できますが。。。</p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal> あ、確実な方法が1つだけあります。受取る側が名前を知っていること。
これ超確実。</p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="88" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[88]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML5</anchor> や元の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Forms 2.0</anchor> は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/x-www-form-urlencoded</anchor></code>
や <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">text/plain</anchor></code> で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>する場合については
<code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_charset_</anchor></code> hack を定義していますが、
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> の処理は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2388</anchor> 
に丸投げしているので、 <code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_charset_</anchor></code> hack
は正式にはどこでも定義されていませんでした。</p></history><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> その後の改訂で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML Standard</anchor> で <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code>
の時も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="HTML" xml:lang="en">_charset_</code> hack</anchor> の扱いが規定されるようになりました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="170" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[170]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7578</anchor> も、それが既定の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor> を規定する <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>
と述べています。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="171" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[171]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>かどうかをどのように判定するのかは述べられていません。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="87" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[87]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Safari</anchor> 以外のブラウザは <code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_charset_</anchor></code> hack に対応しています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の場合、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</anchor>が <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>に指定されますが、 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>を含め、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>までは指定されないのが普通です。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>が選択した<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字コード</anchor>まで知らないのが普通です。</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="69" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[69]</anchor-end> 歴史的事項については、 <code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">制御子名</anchor>の項目も参照。</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="176" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[176]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7578</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2047</anchor> <code xmlns="http://www.w3.org/1999/xhtml" class="ABNF" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">encoded-word</anchor></code>
や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2231</anchor> の方法を使っていた実装もあるかもしれない <src><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="70" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;70</anchor-internal></src>
として、それら古い方法への対応の必要性も匂わせています。しかし、
そのような実装があったとしても少数で、現在となってはまったく存在感はなく、
対応する必要性は全くないと思われます。</comment-p></section><section><h1>本体部分の実体本体</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end>
各本体部分の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体</anchor>は、ファイル選択制御子 
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="HTMLe">input</code>//<code xmlns="http://www.w3.org/1999/xhtml" class="HTML">file</code></anchor>) ではファイルの内容、
それ以外では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現在値</anchor>になります。 
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(という説明が HTML 4 仕様書ではきちんとなされていません。)</weak></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form><section><h1>内容転送符号化・内容符号化</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> 各本体部分は <abbr><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CTE</anchor><title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><code xmlns="http://www.w3.org/1999/xhtml" class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Transfer-Encoding</anchor></code></title></abbr> 
を使ってもかまいません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2, RFC 2388 3., RFC 2388 4.3</src>
その他 MIME の機構により暗号化・圧縮などをしても構いません。
それは <code class="MIME">multipart/form-data</code> を生成する応用の機能です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2388 5.1</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="53" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[53]</anchor-end> ただし、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> で <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code>
を使う場合は、仕様が曖昧なためその中の本体部分で
<code class="MIME">Content-Transfer-Encoding</code> を使用するべきではありません。
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Encoding</anchor></code> を本体部分に適用できるのかどうかも曖昧であり、
使わない方が良いです。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(対応している実装も少ないでしょう。)</weak> 
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Transfer-Encoding</anchor></code> を本体部分に適用することはできません。</p><p>なお、これは <code class="MIME">multipart/form-data</code> <em>内</em>の各本体部分についてであり、
<code class="MIME">multipart/form-data</code> 実体自体については <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="54" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;54</anchor-internal> をご覧下さい。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="75" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[75]</anchor-end> どのブラウザも、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容符号化</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容転送符号化</anchor>は使用しないようです。
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Transfer-Encoding</anchor>:</code> 欄や
<code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Encoding</anchor>:</code> 欄も使用していないようです。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の場合のみ調べています。)
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal> は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Transfer-Encoding:</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">8bit</anchor></code> と
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Transfer-Encoding:</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">binary</anchor></code> を1つの
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> で混在させた例を示しています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="172" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[172]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2388</anchor> の改訂である <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7578</anchor> は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> のように <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CTE</anchor> が不要なら、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非推奨</anchor>であり、
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Transfer-Encoding:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>を生成する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べきではない</strong></anchor>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;43</anchor-internal></src> とされています。そのような実装は知られていない <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;43</anchor-internal></src>
とも述べられています。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="173" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[173]</anchor-end> しかしなぜか完全に禁止しているわけではないようです。また、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">電子メール</anchor>で使う場合には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CTE</anchor> が適用される可能性はありそうです。</comment-p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <cite>Chunked File Upload Support - Apache Sling - Apache Software Foundation</cite> (<time>2014-09-18 15:36:49 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://cwiki.apache.org/confluence/display/SLING/Chunked+File+Upload+Support">https://cwiki.apache.org/confluence/display/SLING/Chunked+File+Upload+Support</anchor-external></li></ul></refs></section><section><h1>遠隔ファイル指示子</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end> 遠隔ファイルを直接送らずに、 <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">message/external-body</anchor></code> 
を使ってその<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">指示子</anchor>だけを送ることができます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2388 5.3</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="52" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[52]</anchor-end>
<code class="MIME">message/external-body</code> の使い方は色々ありますが、
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">access-type</anchor></code> <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">uri</anchor></code>
を使って遠隔ファイルの 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI参照</anchor>を送るのが現代的でよろしいのではないでしょうか。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="83" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[83]</anchor-end> これに対応しているブラウザや<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム処理エージェント</anchor>があるという話は聞いたことがありません。</p></section></section><section><h1>ファイルの個数</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="73" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[73]</anchor-end> 1つの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">欄</anchor>が複数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>を含むときは、
同じ <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>の異なる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>としなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="72" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;72</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="82" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[82]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> では、 <code xmlns="http://www.w3.org/1999/xhtml" class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&lt;input type=file&gt;</anchor></code> に
<code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multiple</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>を指定することで、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>が複数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>を選択できるようになります。</comment-p><section><h1><code class="MIME" xml:lang="en">multipart/mixed</code> 方式</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="51" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[51]</anchor-end> かつては、1つのフォーム項目として複数のファイルを同時に提出する場合には、
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code> を使って1つの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>とすることになっていました。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2, RFC 2388 3., RFC 2388 4.2</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="150" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[150]</anchor-end> しかしこの方式は現在では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非推奨</anchor>とされています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="72" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;72</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="151" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[151]</anchor-end> ファイル名等はその <code class="MIME">multipart/mixed</code>
内のそれぞれの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>の情報として付与します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> 提出ファイルが複数の時の <code class="MIME">multipart/mixed</code> 内の本体部分では
<code class="MIME">Content-Disposition: file</code> とするかのような記述が仕様書にあります
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4.01 17.13.4.2</src> が、
<code class="MIME">attachment</code> の誤りだそうです <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4.01 正誤表 10.</src>。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">みっともないことに HTML 4.01 正誤表は <anchor>RFC 2388</anchor> に責任転嫁しております(w。確かに元々 HTML 4.0 では <code xmlns="http://www.w3.org/1999/xhtml" class="MIME">attachment</code> になっておりましたが、 HTML 4.01 で <q xmlns="http://www.w3.org/1999/xhtml">minor typo</q> として修正されています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4.01 A.1.3</src>。</weak></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> それと直接的に関係あるのかはわかりませんが、
サーバーが UA に保存させるのに、 dispositon 型 <code xmlns="http://www.w3.org/1999/xhtml">file</code> を指定して、 <samp xmlns="http://www.w3.org/1999/xhtml">Content-Disposition: file; filename=foo</samp> のように指定することがあるようです。 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> script とかで。)
(正しくはやはり <code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition: attachment</anchor></code>。)</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">device-upload</anchor> も <code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition:</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">file</anchor></code>
に触れていました。<refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <cite>Form-based Device Input and Upload in HTML</cite> (<time>2014-02-24 22:02:57 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/device-upload#Extensions">http://www.w3.org/TR/device-upload#Extensions</anchor-external></li></ul></refs></comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="152" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[152]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> や <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> の仕様の側では複数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>を1つの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">欄</anchor>で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>することになってはいましたが、
実際にはこれは (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>側でも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>側でも) 対応されていませんでした。
そのまま <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>を拡張すると<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>が意図しない
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code> データを受信することになってしまうため、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Forms 2.0</anchor> は <code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">min</anchor></code>/<code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">max</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>が受信を意図する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の個数を明示できるようにしました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="78" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[78]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> 9 は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Forms 2.0</anchor> の <code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">max</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>による指定を使った<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の複数同時<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>に対応しています。
複数のファイルが含まれる場合、仕様通り <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code>
が使われます。その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>については、単体の場合と同じように挿入されます。
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition</anchor>:</code> の値は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2388</anchor> とも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML4</anchor>
とも違って <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form-data</anchor></code> になります。
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>も単一ファイルの場合と同じように指定されます
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code> の方にも指定されますが、個々の<anchor>本体部分</anchor>の方にも指定されます)</weak>。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(複数ファイル指定可能であっても、選択数が1つ以下なら従前の方法によります。)</weak>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="153" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[153]</anchor-end> しかし、結局複数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>を受信するために<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>側で新たに
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code> に対応しなければならないことには変わりありません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Forms 2.0</anchor> が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML5</anchor> に統合されるに当たり、
<code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">min</anchor></code>/<code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">max</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>による複数<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>機能は廃止され、
代わって新たに <code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mutliple</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>による<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>が導入されました。
新方式では <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code> を使わず、同名の複数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>を用いる方法に変更されました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="154" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[154]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7578</anchor> はこれを踏まえて <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code>
を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非推奨</anchor>とし、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> が採用した方法を使わなければならないとしました。
その一方で、広い応用可能性を求める<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor> (例えば<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ライブラリー</anchor>)
は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code> 方式も対応する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べき</strong></anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="72" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;72</anchor-internal></src>
としています。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="155" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[155]</anchor-end> 実際には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Presto</anchor>) 以外に旧方式の実装が存在していたかも謎で、
実用上はほとんど意味が無いものです。</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="156" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[156]</anchor-end> <code xmlns="http://www.w3.org/1999/xhtml" class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multiple</anchor></code> が指定されたら同名の複数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>として表現するというのは、
<code xmlns="http://www.w3.org/1999/xhtml" class="HTMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">select</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>と共通しています。また同名の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>以外の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームデータ</anchor>の場合に既に使われています
(特に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">チェックボックス</anchor>の場合など)。旧仕様がなぜ敢えて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の場合だけ
<code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/mixed</anchor></code> を使うことにしたのかは謎です。</comment-p></section><section><h1>零個のファイルを提出</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> ファイル選択制御子 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="HTMLe">input</code>/<code xmlns="http://www.w3.org/1999/xhtml" class="HTML">file</code></anchor>) 
があっても、ファイル名として何も指定されなかった場合、
WinIE も Mozilla も Opera も、空の内容を送ります。</p><p>このとき、 WinIE と Mozilla は頭欄に 
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor>: <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/octet-stream</anchor></code> と書いてきて、 
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition</anchor></code> にも <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor>=&quot;&quot;</code> 
がつきます。 Opera ではどちらもつかず、本当に空 
(<code class="MIME">Content-Disposition: <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form-data</anchor>; name=<var>名前</var></code> 
と空の内容だけ) になります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> 頭欄がどうであれ、空の実体を送ってしまうと <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(一般の UA の場合に)</weak>
ファイル未選択状態と内容が空のファイルを提出した場合が区別できなくなってしまいます。
ファイルを選択していないファイル選択制御子はそもそも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">成功</anchor>にしてはいけないのではないでしょうか。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="80" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[80]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML5</anchor> でも選択されていない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル選択制御子</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム・データ集合</anchor>に含まれない定義になっていますがね。。。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="81" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[81]</anchor-end> どのブラウザも、選択されていなくても空の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体本体</anchor>を含めるようです。
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition</anchor>:</code> はファイル以外の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">制御子</anchor>の場合と同じです
(<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>がつきません)。
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor>:</code> は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> 以外は
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/octet-stream</anchor></code> とします。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">欄</anchor>自体を省略します。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;66</anchor-internal></src></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section></section></section><section><h1><code class="MIME" xml:lang="en">multipart/form-data</code> 符号化算法</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="110" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[110]</anchor-end> <dfn><code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化算法<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">encoding algorithm</rt></rubyb></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム・データ集合</anchor>を <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体</anchor>として<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>するための<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">算法</anchor>です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="111" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[111]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en">multipart/form-data</code>符号化算法</anchor>は次のように定義されています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="109" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;109</anchor-internal></src>。</p><figure class="steps"><ol><li><var>result</var> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空文字列</anchor>とします。</li><li><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">選択された文字符号化<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">selected character encoding</rt></rubyb>を、<ol><li>明示的に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字符号化</anchor>を指定して呼び出された場合は、それとします。</li><li>そうでなく、 <code class="HTMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>が <code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">accept-charset</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>を有する場合、<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム・データ集合</anchor>に含まれる名前と値で使われている<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>と、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>が対応している<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字符号化</anchor>の種類を鑑み、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>中に含まれる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字符号化</anchor>の中から <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII互換文字符号化</anchor>であるものいずれか一つとします。</li><li>それがない場合は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8</anchor> とします。</li></ol></li><li>そうでなく、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書の文字符号化</anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII互換文字符号化</anchor>である場合、それとします。</li><li>そうでない場合、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8</anchor> とします。</li></ol></li><li><var>charset</var> を選択された文字符号化の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">優先MIME名</anchor>とします。</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム・データ集合</anchor>の各<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">項目<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">entry</rt></rubyb>について、<ol><li>名前が <code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_charset_</anchor></code> で型が <code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">hidden</anchor></code> なら、
値を <var>charset</var> に置き換えます。</li><li>名前と値の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>のうち、選択された文字符号化で表現できないものを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">十進数文字参照</anchor>に置き換えます。<ol><li>ここ、十進数部分の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">先導0</anchor>は特に禁止されていないようです。</li></ol></li></ol></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム・データ集合</anchor>を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2388</anchor> に従って符号化します。<ul><li>次のように対応付けます。<ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム・データ集合</anchor>の<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">項目<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">entry</rt></rubyb> → <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">欄<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">field</rt></rubyb></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム・データ集合</anchor>の項目の名前 → <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">欄名<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">field name</rt></rubyb></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム・データ集合</anchor>の項目の値 → <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">欄値<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">field value</rt></rubyb></li></ul></li><li>順序は元のままとします。</li><li>同じ名前の複数の項目は別の欄として扱います。</li><li><code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mutlipart/mixed</anchor></code> による<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル集合</anchor>の符号化の方法は使いません。</li><li><code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">file</anchor></code> でない欄の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体本体</anchor>については、 
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code> を指定しません。</li><li>名前と値は選択された文字符号化により<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>します。<ul><li>これは仕様上明記されていませんが <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2388</anchor> への<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">意図的違反</anchor>です。</li></ul></li><li>ファイル名は選択された文字符号化により<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>します。<ul><li>必要に応じて近似して構いません。例えば<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">改行</anchor>を除去したり、 <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&quot;</anchor></code> を
<code>%22</code> にしたり、表現できない文字を他の文字に置き換えたりして構いません。</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2231</anchor> 形式を使っては<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>。</li></ul></li></ul></li></ol></figure></section><section><h1>HTML</h1><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> HTML 4 UA は、 <code xmlns="http://www.w3.org/1999/xhtml" class="MIME">multipart/form-data</code>
によるフォームの提出を実装しなければなりません <src>HTML 4 17.13.4</src>
と規定されていました。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML5</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム符号化算法</anchor>などに完全に組み込まれており、
<code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mutipart/form-data</anchor></code> に対応しない実装が適合するのか不明です。</comment-p><section><h1><code class="HTMLa" xml:lang="en">enctype</code> 属性値</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="104" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[104]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> の <code class="HTMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の <code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">enctype</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>と、
<code class="HTMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">input</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>や <code class="HTMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">button</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の 
<code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">formenctype</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性値</anchor>として <dfn><code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code></dfn>
を指定することができる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">列挙型属性</anchor>です <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="103" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;103</anchor-internal></src>。この値を指定すると、当該<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(やその<anchor>フォーム</anchor>に属する<anchor>要素</anchor>であって上書きされていないもの)</weak> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">enctype</anchor>
を <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> に設定することができます <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="103" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;103</anchor-internal></src>。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">enctype</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム提出算法</anchor>から参照されています。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="198" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[198]</anchor-end> 
<code xmlns="http://www.w3.org/1999/xhtml">enctype</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">既定値</anchor>は
<code xmlns="http://www.w3.org/1999/xhtml">application/x-www-form-urlencoded</code>
なので、
<code xmlns="http://www.w3.org/1999/xhtml">multipart/form-data</code>
は必ず明示的に指定しなければなりません。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="108" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[108]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">enctype</anchor> が <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> の時の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">適当なフォーム符号化算法</anchor>は
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en">multipart/form-data</code>符号化算法</anchor>です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="105" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;105</anchor-internal></src></p></section><section><h1>フォーム提出算法</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="106" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[106]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム提出算法</anchor>において<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体本体</anchor>を構築するに当たり、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出子</anchor>たる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ボタン</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">enctype</anchor> が参照されます。それが <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> である場合、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体本体</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</anchor> (<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code> 欄の値) としては、<pre class="MIME code">multipart/form-data; boundary=<var>boundary-string</var></pre>... が使われます。ただし <var>boundary-string</var> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en">multipart/form-data</code>境界文字列</anchor>です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="103" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;103</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[107]</anchor-end> つまりすべて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">小文字</anchor>で、 <code xmlns="http://www.w3.org/1999/xhtml" class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SPACE</anchor></code> が <code xmlns="http://www.w3.org/1999/xhtml" class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">;</anchor></code>
の直後に1つだけ挿入され、 <code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boundary</anchor></code> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">token</anchor> として表現されます。</comment-p></section></section><section><h1>API</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="143" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[143]</anchor-end> <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> そのものに関する <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">API</anchor>
はありませんが、 <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> で送信されることになる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームデータ集合</anchor>を表す<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>として
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FormData</anchor></code> があります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="144" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[144]</anchor-end> <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FormData</anchor></code> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XHR Standard</anchor> により規定されていますが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XHR</anchor> 以外の目的でも使うことができます。</p></section><section><h1>処理</h1><section><h1>大容量ファイルの受信</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="190" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[190]</anchor-end> <code class="MIME" xml:lang="en">multipart/form-data</code> は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイルアップロード</anchor>に使われます。
しかし実のところ <code class="MIME" xml:lang="en">multipart/form-data</code> は大容量の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の送受信に適した形式というわけでもありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="191" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[191]</anchor-end> <code class="MIME" xml:lang="en">multipart/form-data</code> に含める<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームデータ</anchor>の順序は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">制御子</anchor>の種別と無関係に決まります。ですから、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>がどこに来るかはわかりません
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム制御子</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>中の位置に依存します)。
受信者 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>) は受信したデータの末尾まで読み終わらないと、
処理に必要なすべての<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォームデータ</anchor>を受信したのかどうか確実に判断することができません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="192" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[192]</anchor-end> つまり、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>は大容量の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>が含まれる (かもしれない)
<code class="MIME" xml:lang="en">multipart/form-data</code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求本体</anchor>を全部読み込み終わらないと、
それをどう処理するべきか判断できる保証がありません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求本体</anchor>を単純に先頭から末尾まで読みつつ処理するなら大容量のデータを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メモリー</anchor>上に保持しておく必要がありますし、
それが難しそうなら<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">一時ファイル</anchor>に書き込んでから処理するしかなさそうです。
どんなデータを与えられるか事前にまったく予測できない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プログラミング言語</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ライブラリー</anchor>などでは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">一時ファイル</anchor>に保存する方法を選択することが多いようです。</p></section></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="93" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[93]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WAP</anchor> により規定された <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> に相当する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>表現として、
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/vnd.wap.multipart.form-data</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">媒体型</anchor>がありました。</p><section><h1>HTML と <code class="MIME">multipart/form-data</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> HTML のフォームでは <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/x-www-form-urlencoded</anchor></code>
もよく使われていますが、任意のバイナリ・データや非 ASCII 
文字を効率よく確実に扱うことができないという問題があります。
バイナリ・データや非 ASCII 文字を含むフォームの提出では、
<code class="MIME">multipart/form-data</code> を使うべきです <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2</src>。
ファイル選択制御子 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="HTMLe">input</code>/<code xmlns="http://www.w3.org/1999/xhtml" class="HTML">file</code></anchor>)
を使う時には、 <code class="MIME">multipart/form-data</code> を
<code class="HTMLe">form</code> の <code class="HTMLa">enctype</code> で指定するべきです
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.3, 17.13.4.2</src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> HTML のフォームで <code class="MIME">multipart/form-data</code> で提出させたい時は、
<code class="HTMLe"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form</anchor></code> 要素の <code class="HTMLa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">enctype</anchor></code>
属性に <code class="MIME">multipart/form-data</code> と指定しておきます。</p><p>各本体部分の文字符号化方式の決定には、 <code class="HTMLe">form</code>
要素の <code class="HTMLa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">accept-charset</anchor></code> 属性の指定を参照します。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>転送プロトコルと <code class="MIME">multipart/form-data</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="54" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[54]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> の規定によれば、 <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/<var xmlns="http://www.w3.org/1999/xhtml">*</var></anchor></code>
のすべての<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体</anchor>の <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Transfer-Encoding</anchor></code>
は <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">7bit</anchor></code>, <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">8bit</anchor></code>, <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">binary</anchor></code>
のいずれかでなければなりません。もちろん <code class="MIME">multipart/form-data</code>
の実体にも適用されます。</p><p>注意: <code class="MIME">multipart/form-data</code> 
の<em>中</em>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体部分</anchor>についての規定では<em>ありません</em>。
本体部分の <abbr>CTE</abbr> については <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="53" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;53</anchor-internal> を参照して下さい。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="55" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[55]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> では <code class="MIME">Content-Transfer-Encoding</code>
を使用しません (常に <code class="MIME">binary</code> 相当です) が、
<code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Encoding</anchor></code> と <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Transfer-Encoding</anchor></code>
があります。 <code class="HTTP">Transfer-Encoding</code> は媒体型に依存しませんので、
<code class="MIME">multipart/form-data</code> であろうがそうでなかろうが常に使用できます。
<code class="HTTP">Content-Encoding</code> が使用できるのかどうかは微妙なところですが、
特別規定がないのですから、使用できるのでしょう。但し、
それに対応している実装 (クライアント・鯖) がどれだけあるのかは微妙なところです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="56" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[56]</anchor-end> <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-MD5</anchor></code> による簡易的な整合性情報は、
MIME では <code class="MIME">multipart/<var>*</var></code> に対して使用することが認められて<em>いません</em>が、
HTTP では認められています。 <code class="MIME">multipart/form-data</code>
についても例外ではありません。</p><p>しかし、 <code class="MIME">multipart/form-data</code> 全体の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MD5</anchor>
ハッシュを計算するよりは、面倒でも個々の本体部分で計算した方が良いでしょう。
もし HTTP で提出された <code class="MIME">multipart/form-data</code> が途中で
MIME に変換されて <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(例えば電子メイルで)</weak> 
送られるとすると困ったことになります。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="64" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[64]</anchor-end> そんなことあるのか知りませんがw</comment-p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>その他</h1><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section></section><section><h1>保安性</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="50" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[50]</anchor-end> <code class="MIME">multipart/form-data</code> 
を構成するプロトコル要素や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム</anchor>の仕組み自体には、
様々な安全上の問題があることが知られています。</p><p>例えば、利用者の意図しない状態や利用者が十分な考慮を行えない状況で自動的・
半自動的にフォームを提出させると、
利用者の私的な情報や利用者の環境の安全に関わる情報が送信されてしまう虞があります。
このほかにも、フォームの提出という仕組みそのものに起因する問題が多く見つかっています。</p><p>また、ファイルを提出する際には <code class="MIME">filename</code>
引数を使うことができますが、フォーム処理エージェント 
(<code class="MIME">multipart/form-data</code> を処理する側) 
が信頼して無防備に実際のファイル名等として使用すると、
既存の別のファイルやシステム・ファイルを上書きしたり、
その環境で扱えないファイル名のファイルが中途半端にできてしまったりする虞があります。
詳しくは <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">filename</anchor></code> 引数の説明をご覧ください。</p><p>このようなフォーム自体や <code class="MIME">multipart/form-data</code>
が利用しているプロトコル要素に関する問題や、
特定の実装に依存した問題を除いては、 <code class="MIME">multipart/form-data</code>
に関する安全上の問題は見つかっていません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="57" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[57]</anchor-end> 提出の途中での改竄を検出する簡易的な手段として
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-MD5</anchor></code> が使用できます (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="56" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;56</anchor-internal>)。
但し記述された <code class="MIME">Content-MD5</code> 値自体が改竄されることもあり得ますから、
あくまで簡易的なものです。また、
実装している<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は現時点で存在しないと思われます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="58" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[58]</anchor-end> 一般の MIME の実体の安全のための仕組みとして<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">署名</anchor>のための
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/signed</anchor></code> や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">暗号化</anchor>のための
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/encrypted</anchor></code> が、
それを使った実際のシステムとして <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PGP/MIME</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">S/MIME</anchor>
があります。しかし、現実に <code class="MIME">multipart/form-data</code>
と組合せて使っている (使える) 例は聞いたことがありません。
<code class="MIME">multipart/form-data</code> のどの部分を署名・暗号化するのか
(あるいは全体をするのか) や、フォームの提出の手続きの中でどのように処理するのかなどの詳細な標準化がなされないと
(または<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">デファクト標準</anchor>が登場しないと) 使用するのは難しいでしょう。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="59" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[59]</anchor-end> 現実にフォームの提出の安全のために使用されているのは
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TLS</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SSL</anchor> です。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> に対応した利用者エージェントや鯖では大抵
TLS over HTTP (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPS</anchor>) が利用できるので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム処理エージェント</anchor>としては特別な処理が要らないのが普通です。
但し、 HTTP 以外の提出方法 (特に電子メイル)
にはこの方法は使えません。</p></section><section><h1>歴史</h1><section><h1>実装開始</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE 3.02</anchor>
用の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">file upload add-on</anchor> は
<time>1997年<attrvalue xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">year:1997</attrvalue></time>の中ごろに出ました。</p></section><section><h1>RFC 1867</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="115" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[115]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 1867</anchor></li></ul></refs></section><section><h1>HTML4 と RFC 2388</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="116" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[116]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML4</anchor> <csection xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">multipart/form-data</csection>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/html4/interact/forms.html#didx-multipartform-data">http://www.w3.org/TR/html4/interact/forms.html#didx-multipartform-data</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="117" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[117]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML4</anchor> <csection xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">A.1.3 Minor typographical errors that were corrected</csection>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/html4/appendix/changes.html#h-A.1.3">http://www.w3.org/TR/html4/appendix/changes.html#h-A.1.3</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="118" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[118]</anchor-end> HTML 4.01 正誤表 <cite>10. content-disposition: attachment</cite>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/MarkUp/html4-updates/errata#entry-10">http://www.w3.org/MarkUp/html4-updates/errata#entry-10</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <strong><cite xml:lang="en">RFC 2388 - Returning Values from Forms: multipart/form-data</cite> (<time>2014-10-05 04:39:46 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://tools.ietf.org/html/rfc2388#section-4.4">http://tools.ietf.org/html/rfc2388#section-4.4</anchor-external></strong></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <cite>RFC Errata Report</cite> (<time>2014-11-03 04:38:57 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.rfc-editor.org/errata_search.php?rfc=2388">http://www.rfc-editor.org/errata_search.php?rfc=2388</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="92" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[92]</anchor-end> 
RFC 1867 と RFC 2388 と HTML 4 の <code class="MIME">multipart/form-data</code>
の規定は文章を流用していて同じようなことが書いてありますが、
少しずつ違います。独立の仕様書になっている RFC 2388 が当然一番詳しくなっています。</p><figure><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML 4</anchor> の <code class="MIME">multipart/form-data</code> への言及の変遷:</figcaption><ol><li>勧告以前の HTML 4 原案では、高々紹介程度で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 1867</anchor> にほぼ丸投げ。</li><li>HTML 4.0 勧告第1版: <em>Forms in HTML documents</em> 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/REC-html40-971218/interact/forms.html#didx-multipartform-data">http://www.w3.org/TR/REC-html40-971218/interact/forms.html#didx-multipartform-data</anchor-external></li><li>HTML 4.0 勧告第2版: <em>Forms in HTML documents</em> 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/1998/REC-html40-19980424/interact/forms.html#didx-multipartform-data">http://www.w3.org/TR/1998/REC-html40-19980424/interact/forms.html#didx-multipartform-data</anchor-external><ul><li>勧告第1版と全く同内容</li></ul></li><li>HTML 4.01 勧告提案: <em>Forms in HTML documents</em> 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/1999/PR-html40-19990824/interact/forms.html#didx-multipartform-data">http://www.w3.org/TR/1999/PR-html40-19990824/interact/forms.html#didx-multipartform-data</anchor-external><ul><li>RFC 1867 から <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2388</anchor> に参照先を変更</li></ul></li><li>HTML 4.01 勧告: <em>Forms in HTML documents</em> 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#didx-multipartform-data">http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#didx-multipartform-data</anchor-external><ul><li>typo 修正</li><li>例中の <code class="MIME">Content-Disposition: attachment</code>
を <code class="MIME">Content-Disposition: file</code> に変更</li></ul></li><li>HTML 4.01 正誤表:
<em>HTML 4 Errata</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/MarkUp/html4-updates/errata#entry-10">http://www.w3.org/MarkUp/html4-updates/errata#entry-10</anchor-external><ul><li>勧告での <code class="MIME">attachment</code> から
<code class="MIME">file</code> に再修正。しかも RFC 2388 に責任転嫁(藁</li></ul></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <code class="MIME">multipart/form-data</code> 内容は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2045</anchor>
で説明された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">多部分</anchor> MIME データ列の規則に従います。
<code class="MIME">multipart/form-data</code> の定義は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IANAREG</anchor>
から入手できます。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2</src>
と書いてありますけど、むしろ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2046</anchor> を読むべきでしょう。
また、後方互換性, 他の内容型との関係, 効率の問題その他については
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 1867</anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4.0 17.13.4.2</src> ・ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2388</anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4.01 17.13.4.2</src>
を読むよう指示があります。
ちなみに、仕様書の発行順序は HTML 4.0 → RFC 2388 → HTML 4.01 です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="95" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[95]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML4</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム</anchor>で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非ASCII文字</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>される可能性がある場合に
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/x-www-form-urlencoded</anchor></code> の代わりに
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> を使うことを勧めていましたが、
世間からは完全に無視されています。</p></section><section><h1>device-upload</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="119" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[119]</anchor-end> <cite>Form-based Device Input and Upload in HTML</cite> (<time>2000-03-13 23:37:05 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/1999/07/NOTE-device-upload-19990706">http://www.w3.org/1999/07/NOTE-device-upload-19990706</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="98" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[98]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">device-upload</anchor> では、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">音声</anchor>等の新しい<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">うp</anchor>の方法に適用するための
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">device</anchor></code> などの <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Disposition</anchor>:</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>を提案し、
その指定方法を規定していました。</p></section><section><h1>HTML 以外への展開</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="112" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[112]</anchor-end> <cite xml:lang="EN">Voice Extensible Markup Language (VoiceXML) 2.1</cite> (<time>2007-06-17 03:12:27 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/2007/REC-voicexml21-20070619/#sec-data">http://www.w3.org/TR/2007/REC-voicexml21-20070619/#sec-data</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="113" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[113]</anchor-end> <cite xml:lang="EN">XForms 1.0 (Third Edition)</cite> (<time>2007-10-30 03:02:40 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/2007/REC-xforms-20071029/#serialize-form-data">http://www.w3.org/TR/2007/REC-xforms-20071029/#serialize-form-data</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="114" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[114]</anchor-end> <cite xml:lang="en">Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts</cite> (<time>2007-06-23 05:33:39 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/2007/REC-wsdl20-adjuncts-20070626/#_http_operation_multipart_encoding">http://www.w3.org/TR/2007/REC-wsdl20-adjuncts-20070626/#_http_operation_multipart_encoding</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="99" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[99]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">VoiceXML</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">解釈器</anchor>は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code>
に対応することが義務付けられています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">VoiceXML 2.1</anchor></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="96" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[96]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XForms</anchor> でも、「互換性のため」としながらも <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code>
を使うことができます。ただし、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XForms</anchor> のモデル上のすべての情報を含められるわけではなく、
例えば<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性節点</anchor>に相当する情報は欠落します。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XForms</anchor> は注記として、既存の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非ASCII文字</anchor>等の扱いが芳しくないことを指摘しています。
それとどう関係があるのか知りませんが (だからきちんと処理するよう指導しているわけでもありません)、
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/related</anchor></code> や <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/xml</anchor></code>
を使うことを勧めています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="97" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[97]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WSDL</anchor> でも、 「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XForms</anchor> との互換性のため」として
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> を使うことができます。</p></section><section><h1>WF2 と HTML5</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="120" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[120]</anchor-end> <cite xml:lang="en-GB-x-Hixie">Web Forms 2.0</cite> (<time>2006-10-12 09:55:44 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.whatwg.org/specs/web-forms/current-work/#form-submission">http://www.whatwg.org/specs/web-forms/current-work/#form-submission</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="121" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[121]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WF2</anchor> ははじめて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム提出算法</anchor>を明確な形で仕様として規定しました。その中に
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> による<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>の方法も含まれていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="122" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[122]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML Living Standard</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML5</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Applications 1.0</anchor>) はこれを引き継ぎ、
更により明確かつ具体的に <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> の処理も規定しています。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="101" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[101]</anchor-end> <cite>Bug 10461 – This algorithm needs more detail on how the data is to be actually encoded. E.g. does it depend on the document encoding, etc.</cite>
( (<time>2010-10-12 21:26:59 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/Bugs/Public/show_bug.cgi?id=10461">http://www.w3.org/Bugs/Public/show_bug.cgi?id=10461</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="102" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[102]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r5600     Redefine how we interact with RFC 2388 (multipart/form-data) in submissionFixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10461</cite>
( (<time>2010-10-12 09:10:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://html5.org/tools/web-apps-tracker?from=5599&amp;to=5600">http://html5.org/tools/web-apps-tracker?from=5599&amp;to=5600</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="123" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[123]</anchor-end> とはいえ、いずれの仕様書も <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> 自体の生成の部分は
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> に委ねており、 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="102" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;102</anchor-internal> により曖昧な部分を明確化したとはいえ、結果として
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">delta spec</anchor> のような状態になっています。</p></section><section><h1>RFC 7578</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> 2015年7月には、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2388</anchor> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">廃止</anchor>して新たに <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7578</anchor></dfn>
が出版されています。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> <cite xml:lang="en">RFC 7578 - Returning Values from Forms: multipart/form-data</cite> (<time>2015-07-19 23:17:07 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7578">https://tools.ietf.org/html/rfc7578</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="142" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[142]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>業界からの要求がようやく少しずつ反映されて、
実態により近い形に改訂されています。 (とはいうものの、
基本的には昔ながらの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> のスタイルからは脱却できず、
現代 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web標準</anchor>レベルの正確な仕様書にはなっていません。)</p></section></section><section><h1>実装</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> 現代のほとんどの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WWWブラウザ</anchor>は <code class="MIME">multipart/form-data</code>
によるフォームの提出を実装しています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end>
一方、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>などの鯖側は酷い状況です。
多くの実装は相手にもしていません。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> なら <code class="file"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI.pm</anchor></code> 
などを使えば自動的に対応できますが、<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">最近は増えてきたとはいえ</weak>モジュールを
CGI スクリプトで使うことは少なく、 <code class="MIME">application/x-www-form-urlencoded</code>
にしか対応していません。ファイルのうpがしたくなったら 
(素直にモジュールを使えばいいのに) 見よう見まねで適当に対処しようとして、
結局特定ブラウザの特定の版でしか上手く動かないようなコードを書いてみたり。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(で、質問掲示板で暴れてみたり。)</weak> お前らちゃんと仕様書読んでくださいよ。</p><p>処理系で標準または標準に近いモジュール的なものが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>の解析をしてくれることが広く知られていて、
そのモジュール的なものの作者がちゃんと仕様を読んでコードを書くような人なら、
その処理系で書かれた処理はさほど深く考えなくても自動的に 
<code class="MIME">multipart/form-data</code> を正しく処理できるはずです。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">よく知りませんけど、 Java servelet とか PHP はその辺きちんとしてるのではないですか?</weak></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[66]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> 3.0.4、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> 9.61、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Safari</anchor> 3.2、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE 7</anchor> の実装状況を調べてみました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="94" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[94]</anchor-end> <cite xml:lang="ja">enctype=&quot;multipart/form-data&quot;で携帯からファイルアップロード « 携帯・モバイル « プログラム « Re:</cite> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">kronekodow</anchor> 著, <time>2008-11-25 17:16:30 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://blog.livedoor.jp/kronekodow/archives/64944587.html">http://blog.livedoor.jp/kronekodow/archives/64944587.html</anchor-external></p><blockquote><p>SoftBankが素敵に思えた。</p><p>データフォルダから直アップできるんですね。</p><p>fileup_auauは(W52SHは)Browse...ってボタンは出るものの反応しない。</p><p>DoCoMoはボタンすら出ない。</p><p>SoftBankでも、C端末、3GC端末などによる違など全てじゃなかったり、auも一部端末なら出来たり?(HTMLやXHTMLの違いなども関係したり)とか、可能な端末の振り分けは大変そうです。</p></blockquote><section><h1>複数ファイルをまとめて提出</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 1つのファイル選択制御子 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="HTMLe">input</code>//<code xmlns="http://www.w3.org/1999/xhtml" class="HTML">file</code></anchor>) 
を使って複数ファイルをうpする (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="51" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;51</anchor-internal>) のは、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UA</anchor> で対応してるのはなさげ、
サーバーもおそらく全滅だろうという感じですね。 </p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">www-html</anchor> で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> の特定の版では出来るという未確認情報がありましたが、
最新版では出来ないらしいし、勘違いかなんかじゃないかなあ。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="67" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[67]</anchor-end> その後 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> 9 は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Forms 2.0</anchor> に対応しましたので、
複数ファイルの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>にも対応しています。 <code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">file</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">制御子</anchor>用の
<code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">max</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>は一旦 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML5</anchor> で削除されましたが、
<code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multiple</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>が改めて追加される予定ですから、
いずれ他のブラウザも複数ファイルの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor>に対応すると期待されます。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section></section><section><h1>試験事例</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="90" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[90]</anchor-end> <cite>Index of /~wakaba/-temp/test/html/form/multipart-form-data</cite> (<time>2008-11-25 16:03:16 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://suika.fam.cx/~wakaba/-temp/test/html/form/multipart-form-data/">http://suika.fam.cx/~wakaba/-temp/test/html/form/multipart-form-data/</anchor-external></p></section><section><h1>例</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> HTML のフォームの例 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2、改</src><pre class="HTML"> &lt;FORM action=&quot;http://server.example/cgi/handle&quot;
       enctype=&quot;multipart/form-data&quot;
       method=&quot;post&quot;&gt;
   &lt;P&gt;
   What is your name? &lt;INPUT type=&quot;text&quot; name=&quot;submit-name&quot;&gt;&lt;BR&gt;
   What files are you sending? &lt;INPUT type=&quot;file&quot; name=&quot;files&quot;&gt;&lt;BR&gt;
   &lt;INPUT type=&quot;submit&quot; value=&quot;Send&quot;&gt; &lt;INPUT type=&quot;reset&quot;&gt;
 &lt;/FORM&gt;</pre></p><p>このフォームで、文章入力欄に <samp>Larry</samp> と記入し、ファイル選択で
<samp class="file">file1.txt</samp> を指定して提出した場合 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2, 改</src>:<pre class="MIME">Content-Type: multipart/form-data; boundary=AaB03x
<strong></strong>
--AaB03x
Content-Disposition: form-data; name=&quot;submit-name&quot;
<strong></strong>
Larry
--AaB03x
Content-Disposition: form-data; name=&quot;files&quot;; filename=&quot;file1.txt&quot;
Content-Type: text/plain
<strong></strong>
<var>... contents of file1.txt ...</var>
--AaB03x--</pre></p><p>更に <samp class="file">file2.gif</samp> も選択していた場合 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">HTML 4 17.13.4.2, 改</src>:<pre class="MIME">Content-Type: multipart/form-data; boundary=AaB03x
<strong></strong>
--AaB03x
Content-Disposition: form-data; name=&quot;submit-name&quot;
<strong></strong>
Larry
--AaB03x
Content-Disposition: form-data; name=&quot;files&quot;
Content-Type: multipart/mixed; boundary=BbC04y
<strong></strong>
--BbC04y

Content-Disposition: <del>file</del> <ins>attachment</ins>; filename=&quot;file1.txt&quot;
Content-Type: text/plain
<strong></strong>
<var>... contents of file1.txt ...</var>
--BbC04y
Content-Disposition: <del>file</del> <ins>attachment</ins>; filename=&quot;file2.gif&quot;
Content-Type: image/gif
Content-Transfer-Encoding: binary
<strong></strong>
<var>...contents of file2.gif...</var>
--BbC04y--
--AaB03x--</pre></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> ユーロ通貨記号を値に使った例 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">RFC 2388 4.5、改</src><pre class="HTML">Content-Type: multipart/form-data; boundary=&quot;AaB03x&quot;

--AaB03x
content-disposition: form-data; name=&quot;field1&quot;
content-type: text/plain; charset=windows-1250
content-transfer-encoding: quoted-printable

Joe owes =80100.
--AaB03x--</pre></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>Q &amp; A</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="63" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[63]</anchor-end> <strong>Q: HTML でファイルをアップロードするにはどうしたらいいですか? ファイル名しか取得できません...</strong></p><p>A: ファイル名しか取得できないのは、
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/x-www-form-urlencoded</anchor></code>
を使用しているからの可能性が高いと考えられます。
フォームの提出で <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code>
を使うようにしましょう。</p><p>関連: <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="61" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;61</anchor-internal>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="HTMLe">input</code>//<code xmlns="http://www.w3.org/1999/xhtml" class="HTML">file</code></anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="61" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[61]</anchor-end> <strong>Q: HTML によるフォームの提出でブラウザに <code class="MIME">multipart/form-data</code> で送ってもらうにはどうしたらいいですか?</strong></p><p>A: <code class="HTMLe"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form</anchor></code> 要素の <code class="HTMLa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">enctype</anchor></code>
属性を <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code> と指定してください。</p><p>ついでに、 <code class="HTMLa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">accept-charset</anchor></code> 属性に希望する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字コード</anchor>も指定しておきましょう。</p><p><code class="HTMLa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">method</anchor></code> 属性を <code class="HTML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">post</anchor></code>
にしておくのを忘れないように。</p><p>関連: <code class="HTMLe"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">form</anchor></code>, <code class="HTMLa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">enctype</anchor></code>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提出</anchor></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="62" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[62]</anchor-end> <strong>Q: CGI スクリプトで <code class="MIME">multipart/form-data</code> と <code class="MIME">application/x-www-form-urlencoded</code> を見分けるにはどうしたらいいですか?</strong></p><p>A: <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> には <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CONTENT_TYPE</anchor></code> という<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メタ変数</anchor>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">環境変数</anchor>) があります。その値で判別できます。</p><p><code class="CGI">CONTENT_TYPE</code> の値の先頭の19文字が
<code class="MIME">multipart/form-data</code> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(大文字・小文字の区別なし)</weak>
で、その次の文字が存在しないか、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">間隔</anchor>、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タブ</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">改行</anchor>) か、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セミコロン</anchor> (<code class="MIME">;</code>)
なら、 <code class="MIME">multipart/form-data</code> が使われています。</p><p><code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CONTENT_TYPE</anchor></code> の値の先頭35文字が
<code class="MIME">application/x-www-form-urlencoded</code> 
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(大文字・小文字の区別なし)</weak>
で、その次の文字が存在しないか、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">間隔</anchor>、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タブ</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">改行</anchor>) か、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セミコロン</anchor> (<code class="MIME">;</code>)
なら、 <code class="MIME">application/x-www-form-urlencoded</code> が使われています。</p><p>それ以外なら、未知の何かが使われています。</p><p>関連: <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type</anchor></code>, <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CONTENT_TYPE</anchor></code></p></section><section><h1>メモ</h1><figure class="amazon"><p>Web アプリケーション 開発</p></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="100" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[100]</anchor-end> <cite xml:lang="EN">XForms 1.1</cite>
(<time>2009-10-20 22:51:54 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/2009/REC-xforms-20091020/#serialize-form-data">http://www.w3.org/TR/2009/REC-xforms-20091020/#serialize-form-data</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="132" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[132]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20120502</cite>
( (<time>2012-05-06 21:45:58 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://krijnhoetmer.nl/irc-logs/whatwg/20120502#l-1099">http://krijnhoetmer.nl/irc-logs/whatwg/20120502#l-1099</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="133" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[133]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20120616</cite>
( (<time>2012-07-01 21:51:10 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://krijnhoetmer.nl/irc-logs/whatwg/20120616#l-355">http://krijnhoetmer.nl/irc-logs/whatwg/20120616#l-355</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="134" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[134]</anchor-end> <cite><strong></strong>[<strong></strong>whatwg<strong></strong>]<strong></strong> multipart/form-data filename encoding: unicode and special characters</cite>
( (<time>2012-07-10 06:28:16 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-July/036579.html">http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-July/036579.html</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="135" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[135]</anchor-end> <cite xml:lang="en">Bug 16909 – multipart/form-data: field name encoding is not specified; browsers do incompatible things</cite>
( (<time>2013-09-17 20:42:37 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.w3.org/Bugs/Public/show_bug.cgi?id=16909">https://www.w3.org/Bugs/Public/show_bug.cgi?id=16909</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="136" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[136]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/masinter/multipart-form-data/">https://github.com/masinter/multipart-form-data/</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="137" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[137]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20131010</cite>
( (<time>2013-10-14 00:14:43 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://krijnhoetmer.nl/irc-logs/whatwg/20131010#l-1183">http://krijnhoetmer.nl/irc-logs/whatwg/20131010#l-1183</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="138" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[138]</anchor-end> ( (<time>2013-11-04 07:24:21 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.ietf.org/proceedings/88/slides/slides-88-appsawg-8.pdf">http://www.ietf.org/proceedings/88/slides/slides-88-appsawg-8.pdf</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="139" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[139]</anchor-end> <cite>What's the holdup? · Issue #17 · masinter/multipart-form-data</cite>
( (<time>2014-07-01 07:58:13 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/masinter/multipart-form-data/issues/17">https://github.com/masinter/multipart-form-data/issues/17</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="140" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[140]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20140630</cite>
( (<time>2014-07-01 16:52:23 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://krijnhoetmer.nl/irc-logs/whatwg/20140630">http://krijnhoetmer.nl/irc-logs/whatwg/20140630</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="141" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[141]</anchor-end> <cite xml:lang="zh-tw">Ajax with FormData is Broken on IE10 / IE11 in Some Conditions « 鴨七・chitsaou</cite>
( (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Yu-Cheng Chuang</anchor> 著, <time>2014-07-11 03:23:29 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://blog.yorkxin.org/posts/2014/02/06/ajax-with-formdata-is-broken-on-ie10-ie11">http://blog.yorkxin.org/posts/2014/02/06/ajax-with-formdata-is-broken-on-ie10-ie11</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <cite xml:lang="en-US">Batch Requests | ArangoDB Documentation</cite>
( (<time>2015-01-13 16:43:59 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.arangodb.com/HttpBatchRequest/README.html">https://docs.arangodb.com/HttpBatchRequest/README.html</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="181" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[181]</anchor-end> <cite xml:lang="en">MIME Type Detection in Windows Internet Explorer (Windows)</cite>
(<time>2015-09-26 02:04:58 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://msdn.microsoft.com/en-us/library/ms775147(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/ms775147(v=vs.85).aspx</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="183" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[183]</anchor-end> <cite xml:lang="en">Fix form submission's encoding algorithms</cite>
( (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2016-05-30 23:15:22 +09:00</time>))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/ec42efb1d7c3a2e34db21b8076a8a3f4bd6dfb81">https://github.com/whatwg/html/commit/ec42efb1d7c3a2e34db21b8076a8a3f4bd6dfb81</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="184" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[184]</anchor-end> <cite xml:lang="en">16909 – multipart/form-data: field name encoding is not specified; browsers do incompatible things</cite>
( (<time>2016-06-18 20:48:30 +09:00</time>))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.w3.org/Bugs/Public/show_bug.cgi?id=16909">https://www.w3.org/Bugs/Public/show_bug.cgi?id=16909</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="185" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[185]</anchor-end> <cite xml:lang="en">RFC 2388 has been obsoleted by RFC 7578 · Issue #398 · whatwg/html</cite>
( (<time>2016-06-18 20:49:08 +09:00</time>))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/issues/398">https://github.com/whatwg/html/issues/398</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="186" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[186]</anchor-end> <cite xml:lang="en">136676 – no quoting at all in MIME-Headers (Content-Disposition header not escaped)</cite>
( (<time>2016-06-18 20:50:15 +09:00</time>))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://bugzilla.mozilla.org/show_bug.cgi?id=136676">https://bugzilla.mozilla.org/show_bug.cgi?id=136676</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="187" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[187]</anchor-end> <cite xml:lang="en">Editorial: reference RFC 7578 instead of RFC 2388</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">eehakkin</anchor>著, <time>2016-10-28 17:06:06 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/commit/5d5e80db32cf917233ffa4e95c032f86b7d9f42c">https://github.com/whatwg/fetch/commit/5d5e80db32cf917233ffa4e95c032f86b7d9f42c</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="188" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[188]</anchor-end> <cite xml:lang="en">Add a space before multipart/form-data's boundary parameter</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2016-11-25 16:49:10 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/commit/4f53460fc2d1773ef38633c3c7ac23cf1affb08c">https://github.com/whatwg/fetch/commit/4f53460fc2d1773ef38633c3c7ac23cf1affb08c</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="189" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[189]</anchor-end> <cite xml:lang="en">Clarify package data algorithm for FormData</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">eehakkin</anchor>著, <time>2016-12-17 01:36:13 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/commit/e03ee6fc7f6234005a058d9784e95861b9a0a301">https://github.com/whatwg/fetch/commit/e03ee6fc7f6234005a058d9784e95861b9a0a301</anchor-external></p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="193" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[193]</anchor-end> <cite>S2-045 - Apache Struts 2 Documentation - Apache Software Foundation</cite>
(<time>2017-03-22 01:25:21 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://cwiki.apache.org/confluence/display/WW/S2-045">https://cwiki.apache.org/confluence/display/WW/S2-045</anchor-external></figcaption><blockquote><p>Implement a Servlet filter which will validate Content-Type and throw away request with suspicious values not matching multipart/form-data.</p></blockquote></figure><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="194" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[194]</anchor-end> <cite xml:lang="en">Micropub</cite>
(<time>2017-05-21 23:18:57 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://micropub.net/draft/#form-encoded-and-multipart-requests-p-1">https://micropub.net/draft/#form-encoded-and-multipart-requests-p-1</anchor-external></figcaption><blockquote><p>For x-www-form-urlencoded and multipart/form-data requests, Micropub supports an extension of the standard URL encoding that includes explicit indicators of multi-valued properties. Specifically, this means in order to send multiple values for a given property, you must append square brackets <strong>[</strong><strong>]</strong> to the property name.</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="195" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[195]</anchor-end> <cite>RCS MaaP Chatbot API Specifications Version 1.0</cite>
(<time>2017-11-30 21:47:54 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.gsma.com/futurenetworks/wp-content/uploads/2017/11/FNW.11_v1.0.pdf">https://www.gsma.com/futurenetworks/wp-content/uploads/2017/11/FNW.11_v1.0.pdf</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="196" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[196]</anchor-end> <cite xml:lang="en">Move _charset_ handling to construct the form data set</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tkent-google</anchor>著, <time>2018-04-27 17:25:35 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/8c212e549607a41b6d40d953b47d9f3e749533f3">https://github.com/whatwg/html/commit/8c212e549607a41b6d40d953b47d9f3e749533f3</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="197" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[197]</anchor-end> <cite xml:lang="en">Move _charset_ handling from &quot;multipart/form-data encoding algorithm&quot;… by tkent-google · Pull Request #3645 · whatwg/html</cite>
(<time>2018-05-02 12:51:02 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/pull/3645">https://github.com/whatwg/html/pull/3645</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="199" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[199]</anchor-end> <cite>curl - How To Use</cite>
(<time>2020-09-21T09:01:13.000Z</time>, <time>2020-10-01T06:12:00.173Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://curl.haxx.se/docs/manpage.html#-F">https://curl.haxx.se/docs/manpage.html#-F</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="200" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[200]</anchor-end> <cite xml:lang="en">Use UTF-8 decode without BOM for multipart/form-data</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>, <time>2019-11-04 23:23:54 +09:00</time>, <time>2021-03-06T02:52:53.000Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/commit/7db8ac52245d6f0abaaeec6ae1cd96553c30b737">https://github.com/whatwg/fetch/commit/7db8ac52245d6f0abaaeec6ae1cd96553c30b737</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="201" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[201]</anchor-end> <cite xml:lang="en">Should Body.formData() always strip the BOM? · Issue #650 · whatwg/fetch</cite>
(<time>2021-03-06T02:54:53.000Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/issues/650">https://github.com/whatwg/fetch/issues/650</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="202" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[202]</anchor-end> <cite xml:lang="en">Use UTF-8 decode without BOM for multipart/form-data by annevk · Pull Request #915 · whatwg/fetch</cite>
(<time>2021-03-06T02:58:47.000Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/pull/915">https://github.com/whatwg/fetch/pull/915</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="203" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[203]</anchor-end> <cite xml:lang="en">andreubotella/multipart-form-data: A web-spec definition of multipart/form-data and related algorithms.</cite>
(<time>2021-04-21T12:20:21.000Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/andreubotella/multipart-form-data">https://github.com/andreubotella/multipart-form-data</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="204" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[204]</anchor-end> <cite xml:lang="en">multipart/form-data</cite>
(<time>2021-03-24T15:33:02.000Z</time>, <time>2021-04-21T12:20:32.319Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://andreubotella.github.io/multipart-form-data/">https://andreubotella.github.io/multipart-form-data/</anchor-external></p></section></body></html>