[1] [DFN[[CODE(MIME)[text/plain]]]] はいわゆる [[plain text]] ([[平文]]) の
[[媒体型]]で、もっとも基本的な形式として
[[MIME]] で定義されています。

[9] [[MIME]] は[[媒体型]]が指定されていない時の既定値にこの 
[CODE(MIME)[text/plain]] を採用しています。

[2] また、 [CODE(MIME)[[[text/[VAR[*]]]]]] の媒体型で [[UA]] 
が対応していないものは [CODE(MIME)[text/plain]]
であるとして扱うことになっています。

* 仕様書

[REFS[
- [40] [CITE@en[RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types]] ([TIME[2015-03-22 13:14:46 +09:00]] 版) <http://tools.ietf.org/html/rfc2046#section-3>
- [44] [CITE@en[RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types]] ([TIME[2015-03-22 13:14:46 +09:00]] 版) <http://tools.ietf.org/html/rfc2046#section-4.1>
-- [47] '''[CITE@en[RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types]] ([TIME[2015-03-22 13:14:46 +09:00]] 版) <http://tools.ietf.org/html/rfc2046#section-4.1.3>'''
- [32] [CITE@en[RFC 6657 - Update to MIME regarding "charset" Parameter Handling in Textual Media Types]] ([TIME[2013-03-10 18:09:48 +09:00]] 版) <http://tools.ietf.org/html/rfc6657#section-4>
]REFS]

* 意味

[45] [CODE(MIME)@en[[[text/plain]]]] は、 [CODE(MIME)@en[[[text/*]]]]
の[RUBYB[一般的]@en[generic]]な[[部分型]]で[[平文]]を表すものです [SRC[>>44]]。

[41] [CODE(MIME)@en[[[text/plain]]]] は、いかなる書式付け命令・指令をも含んでいない[RUBYB[平文]@en[plain text]]を表します [SRC[>>40, >>44, >>47]]。
[[平文]]は、 (場合によっては[[改行]]や[[改頁]]を挟みつつ)
[[文字]]を線形に並べたものと見ることができます [SRC[>>44]]。
平文は、「そのまま」表示されることを意図したものです [SRC[>>40, >>47]]。
その文章の意味を完全に理解するのに特別なソフトウェアが何も必要ではありません [SRC[>>40]]。

;; [46] ただし[[平文]]には[[文字]]を同じ位置に重ねたものが含まれるかもしれませんし、
[[bidi]] が含まれるかもしれません [SRC[>>44]]。

;; [42] 厳密に解釈すれば、[[Wiki記法]]や[[Markdown]]のような構文を使って記述されたものは
[CODE(MIME)@en[[[text/plain]]]] とすることはできません。表示するソフトウェアが
[[URL]] を自動リンクしたり、リストのように見えるものを自動的に整形したりするのは、
著者の指示ではなく表示側が勝手に行っているだけなので、問題では無さそうです。

;; [43] [CODE(MIME)@en[[[text/plain]]; [[format]]=[[flowed]]]] はこの
[CODE(MIME)@en[[[text/plain]]]] の意味と矛盾しています。

[55] [[インターネットメール]]の [CODE[text/plain]] は、 [[MIME]] の本家本元でありながら、
歴史的、慣習的な解釈が加わった、純粋な[[平文]]とはいえないものになっています。

;; [[メール本文]]参照。

* パラメーター

,名前	,構文	,既定値	,説明	,状態	,出典
,[CODE(MIME)@en[[[x-action]]]]
,[CODE(MIME)[[[charset]]]]	,[CODE(ABNF)[[[charset]]]]	,(プロトコル依存)	,Charset	,	,[MIME]
,[CODE(MIME)[[[charset-edition]]]]	,[CODE(ABNF)[4[[DIGIT]]]]	,(なし)	,Charset 制定年	,	,[[RFC 1922]]
,[CODE(MIME)[[[charset-extension]]]]	,[CODE(ABNF)[[[token]]]]	,(なし)	,Charset 拡張	,	,[[RFC 1922]]
,[CODE(MIME)[[[delsp]]]]	,	,[[間隔]]削除	,	,[RFC]
,[CODE(MIME)[[[format]]]]	,"[CODE(ABNF)[\"flowed\" / \"fixed\"]]"	,[CODE(MIME)[fixed]]	,書式	,	,"[[RFC 2646]], [RFC]"
,[CODE(MIME)[[[type]]]]	,[CODE(ABNF)[[[token]]]]	,書式	,(なし)	,非標準
,[CODE(MIME)@en[[[reply-type]]]]	,[CODE(MIME example)@en[[[original]]]]	,	,	,非標準
,[CODE(MIME)[[[x-rot]]]]	,[CODE(ABNF)[[[token]]]]	,(なし)	,簡易暗号化	,非標準
,[CODE(MIME)[[[x-type]]]]	,[CODE(ABNF)[[[token]]]]	,(なし)	,書式	,非標準	,[[Namazu]]

* [CODE(MIME)@en[charset]] 引数

[3] [CODE[charset]] パラメーター本体は MIME により、それを補助する
[CODE[charset-edition]] パラメーターと [CODE[charset-extension]]
パラメーターが [[RFC 1922]] により定義されています。
詳しくは [[charsetパラメーター]]と [CODE(MIME)@en[[[text/*]]]] の説明を参照。

[33] >>32 で [CODE(MIME)@en[[[text/*]]]] の [[charset]] の既定値の扱いについて規定がありますが、
[CODE(MIME)@en[[[text/plain]]]] については [[RFC 2046]] から変更せず、 [CODE(charset)@en[[[US-ASCII]]]]
を既定値とするとされています。

;; [34] 少なくても [[HTTP]] では現実に即していないと思いますが・・・。

** "format" パラメーター

[4] [[RFC 2646]] <urn:ietf:rfc:2646> で定義されています。

値は大文字・小文字を区別しません。 "fixed" が既定値で、
MIME の "text/plain", すなわち RFC 822 の本文の形式と同じ意味です。

"flowed" の場合は、 RFC 2646 で定義されているように解釈します。

[7] 実際のところ flowed 形式は (見た目こそ同様ではありますが意味的には)
fixed の text/plain 形式と随分と差があります。
標準化に際して別の媒体型にするかパラメーターにするかの激しい議論があったようですが、結局こうなりました。
- [8] [[Message-pm]] では fixed と flowed を別モジュールに分けて実装しています。
(というかそうしないととっても複雑になりそうだった。)
- [19] [CODE(MIME)[delsp=yes]] ってのをつけてるのがいます。 [CODE(822)[[[X-Mailer]]: Apple Mail (2.552)]] なのが。
- [20] [WEAK[2003-11-21 08:04:53 +00:00]] ''[[US-ASCII]]'': [[Hotmail]] なんかも format=flowed を送ってきます。
- [21] Flowed って text/plain にかなり重大な意味的修正を加えてますよね。それを text/なんたらじゃなくて text/plain にしないといけなかったというのが、なんとも MIME の失敗を物語っているようで。 [WEAK[だって、 MIME がちゃんと実装されていれば、 text/なんたらは未対応でもちゃんと text/plain に fallback されるはずで、何も問題ないんだから。]]
[[#comment]]


** "type" パラメーター, "x-type" パラメーター

[5] 小分類を示します。このパラメーターはどの [[RFC]] 
でも定義されていませんが、用例が観測されています。

[6] 値 "patch" は、内容がパッチであることを示します。
パッチに使われる媒体型には、他に [[text/x-patch媒体型]]がありますが、
"type" parameter も text/x-patch も、使用するべきではありません。
[[text/*媒体型]]では改行の正規化などの制限があるからです。
(See [[text/*媒体型の正規化]]) パッチには 
[[application/octet-stream媒体型]]を使うべきです。
(と、どこかの [[ML]] で[[守岡さん]]が書いてた。)

[7] [[namazu]] は内部処理に "x-type" パラメーターを使っています。
現在使われている値は "rfc" で、 [[RFC]] 形式であることをあらわします。

[[#comment]]


* WWW での使用

[[#comment]]


** フォーム提出形式として

- [10] [[form]] 要素の [[enctype]] 属性に指定された時に、対応する [[UA]] は [[application/x-www-form-urlencoded]] と同じようにフォーム項目の値を用意し、 [[URI符号化]]は'''行わず'''、 "&" の代わりに改行を使います。
- [11] >>10 但しこの動作はどの RFC や W3C の仕様書にも書かれていません。 de facto なものです。
- [12] >>10-11 [[charset]] をちゃんと処理してるのかとか、もともとの改行はどうなるのかとか謎ですし

[25] [CODE(HTMLa)[[[action]]]] が [CODE(URI)[[[mailto]]:]] URI
の時によく使われます。

[22] [[Web Forms 2.0]] や [[HTML 5]] では [CODE(HTMLa)[[[enctype]]]]
が [CODE(MIME)[[[text/plain]]]] の時の UA の挙動も規定しています。

[26]
[CITE[フォームでメールを送信するには]] <http://tohoho.wakusei.ne.jp/lng/199812/98120210.htm>

[29] [CITE@en-GB-x-Hixie[Web Forms 2.0]] ([TIME[2009-01-05 20:07:15 +09:00]] 版) <http://www.whatwg.org/specs/web-forms/current-work/#text-plain>

** 鯖の誤設定と逝かれたブラウザ

- [13] 一部の [[WWWブラウザ]]は、内容に [[HTML]] の[[タグ]]らしきものがあると、媒体型が [CODE[text/plain]] であっても勝手に HTML とみなしてみたり、画像のヘッダらしきものがあると画像とみなしてみたりします。
- [14] このような''誤動作''するのは、 WinIE/MacIE, Opera (こちらは設定で変更可。既定値 off にしとけよな。。。)です。

[15] [[HTTP]] サーバーの設定不良が原因で、媒体型が無意味に 
[CODE(MIME)[text/plain]] になっている資源は沢山あります。

- [17] [[Mozilla]] は、標準モード以外では媒体型が [[text/css]] 以外である [[CSS]] の[[スタイル・シート]] (らしきもの) を「正しく」読み込んでしまいますし、画像などで媒体型を無視する挙動も見せます。 Mozilla はまだまともな方で、 IE などは媒体型よりも[[拡張子]]や内容を重視しているように思えます。
- [18] このような挙動は、時に安全上の重大な問題をも引き起こします。 <IW:Tiki:"Tiki/クロスサイトスクリプティング"> では、 [[Tiki]] の [CODE[text/plain]] 出力の内容に HTML とも解釈し得るものが含まれていて、かつ危険な code も含まれている場合に問題 ([[クロスサイトスクリプティング脆弱性]]) が発生することについての議論です。 (どうして異常な [[UA]] の尻拭いをする必要があるのか, するとしたらどういう方法があるのか, 云々)


[60] 
[[N-Triples]]
は独自の規定を持っています。

*** [CODE(MIME)@en[text/plain]] になってる HTML 文書

[28] [CITE[]] ([TIME[2008-12-22 14:22:16 +09:00]] 版) <http://www.jisc.go.jp/>
(2009年1月現在)

** 素片識別子

[27] [[媒体型]] [CODE(MIME)@en[[[text/plain]]]] の[[素片識別子]]は
[[RFC 5147]] で規定されています。

[16] 歴史的にはそれと異なった実装もありました。

詳しくは [[[CODE(MIME)@en[text/plain]]の素片識別子]]の項を参照してください。

* DOM

[38] [[Webブラウザー]]での [[navigate]] では、架空の [[HTML文書]]に
[CODE(MIME)@en[[[text/plain]]]] の[[文書]]の[[内容]]がそのまま含められることになっています
[SRC[[[HTML Standard]]]]。

[39] [CODE(MIME)@en[[[text/plain]]]] 自体に[[スクリプト]]を含めることはできませんが、
他の [[HTML文書]]で動作する[[スクリプト]]から [CODE(HTMLe)@en[[[iframe]]]]
等によって [CODE(MIME)@en[[[text/plain]]]] [[文書]]の [[DOM]] にアクセスすることはできます。

;;
[59] [[テキストファイルのDOM構築]]参照。

* 関連

[48] 未知の [CODE(MIME)@en[[[text/*]]]] [[MIME型]]は [CODE(MIME)@en[[[text/plain]]]]
として扱うべきとされています。

;; [CODE(MIME)@en[[[text/*]]]] 参照。

* メモ

[23] よく [CODE(MIME)[[[plain/text]]]] と間違えられます。
言葉としてそちらの方が自然ですから、仕方がありません。

(MIME で逆になったのは、元々 [[RFC 1049]] 式の
[CODE(822)[[[text]]]] という型を細分化して [CODE(MIME)[plain]]
という亜型名を付け足したからです。)

しかし、ただ間違えただけならまだしも、
そのまま実装しちゃう人もいるみたいですから呆れます。

[24] [CODE(MIME)[text/plain]] として札付けされていても、
実際には何らかの書式付けがなされていることはかなりあります。

極端な話、 [[XML Schema]] の[[単純型]]で表されるものはすべて
[CODE(MIME)[text/plain]] で札付けしろと言っている仕様もあったりします。
「整数」とか「日付」のようなデータにまで媒体型名を割り振るのは阿呆らしいですし、
人間が読んでも予備知識無しに分かりますから
(しかしその整数が何を意味しているのかはやっぱり分からないかも)、
[CODE(MIME)[text/plain]] を流用するのはまま妥当なことでしょう。
(Plain text なのに [CODE(MIME)[[[application/octet-stream]]]]
というのも嫌な感じです。)

そのような細かなデータの札付けは元々媒体型の対象外でしょうから別としても
(しかし[[フォーム]]の提出などで頻繁に用いられているのは事実)、
プログラムのソース・コードや定型の文書など、
書式のある文書が [CODE(MIME)[[[text/plain]]]] でよく札付けされています。

[Q[Plain text]] の意味が非常に広くとられる傾向にあるというのもそうですが、
よく考えてみれば、狭義の [Q[plain text]] 
にしても改行や段落や引用やちょっとした見出しのように書式を持っています。
結局は程度の問題ということになるでしょう。

[30] [CITE['''['''sylpheed-jp:10706''']''' Re: format=flowedへの対応]]
([TIME[2008-11-17 17:03:16 +09:00]] 版)
<http://www.sraoss.jp/pipermail/sylpheed-jp/2008-November/000707.html>

[31] [CITE[XInclude 1.1 Requirement and Use Cases]]
( ([TIME[2012-02-14 03:10:54 +09:00]] 版))
<http://www.w3.org/TR/2012/NOTE-xinclude-11-requirements-20120214/>

[35] [CITE@en[N-Triples]]
( ([TIME[2013-04-08 21:52:36 +09:00]] 版))
<http://www.w3.org/TR/2013/NOTE-n-triples-20130409/#n-triples-mediatype>

[36] [CITE[IRC logs: freenode / #whatwg / 20140904]]
( ([TIME[2014-09-05 00:52:13 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140904>

[37] [CITE@en[RFC 3801 - Voice Profile for Internet Mail - version 2 (VPIMv2)]]
( ([TIME[2014-09-07 15:46:36 +09:00]] 版))
<http://tools.ietf.org/html/rfc3801#section-4.5.4>

[FIG(quote)[
[FIGCAPTION[
[49] [CITE@en[BEACON link dump format]]
([TIME[2014-07-07 06:04:19 +09:00]] 版)
<https://gbv.github.io/beaconspec/beacon.html>
]FIGCAPTION]

> The RECOMMENDED MIME type of BEACON files is "text/plain". The file extension .txt SHOULD be used when storing BEACON files.

]FIG]


[50] [CITE@en[Remove allow non-ASCII-compatible encodings flag · whatwg/html@c485b70]]
([TIME[2016-02-10 21:55:54 +09:00]] 版)
<https://github.com/whatwg/html/commit/c485b70bfe41ed1302c451bc62b58df80cffd325>

[51] [CITE@en[Update integration with Encoding Standard · whatwg/html@6a31c26]]
([TIME[2016-02-14 19:00:42 +09:00]] 版)
<https://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39>

[52] [CITE@en[Fix form submission's encoding algorithms]]
( ([[annevk]]著, [TIME[2016-05-30 23:15:22 +09:00]]))
<https://github.com/whatwg/html/commit/ec42efb1d7c3a2e34db21b8076a8a3f4bd6dfb81>

[FIG(quote)[
[FIGCAPTION[
[53] [CITE[Bitbucket API]]
([TIME[2017-06-10 16:18:30 +09:00]])
<https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/patch/%7Bspec%7D>
]FIGCAPTION]

> The raw patch is returned as-is, in whatever encoding the files in the repository use. It is not decoded into unicode. As such, the content-type is text/plain.

]FIG]

[54] 
[CODE[text/plain]] とは一体...

[56] [CITE@en[Move _charset_ handling to construct the form data set]]
([[tkent-google]]著, [TIME[2018-04-27 17:25:35 +09:00]])
<https://github.com/whatwg/html/commit/8c212e549607a41b6d40d953b47d9f3e749533f3>

[57] [CITE@en[Move _charset_ handling from "multipart/form-data encoding algorithm"… by tkent-google · Pull Request #3645 · whatwg/html]]
([TIME[2018-05-02 12:51:10 +09:00]])
<https://github.com/whatwg/html/pull/3645>

[58] [CITE@en[CORB: protecting certain nosniff and 206 responses]]
([[anforowicz]]著, [TIME[2018-05-17 16:24:03 +09:00]])
<https://github.com/whatwg/fetch/commit/794dd5452705564538440cc5b2c1f13d909e2f9a>