TEXTAREA内の半角スペース

Webテンプレート HTML+CSSサンプルコード集



0   名前: Strata : 2005/09/23 19:19
はじめまして。テキストエリアの初期値内に   を記述した場合の扱いについて質問があります。
例えば他の実態参照 &lt; や &gt; では送信データ上通常の < や > に置き換わるみたいですが、半角スペースの場合は実態参照の文字列「&nbsp;」がそのまま送信されてしまいます。

この扱いの違いは何でしょう?
また、テキストエリアの初期文字列に半角スペースの実態参照 &nbsp; を使用するのはHTMLの仕様上妥当なのでしょうか?

どなたかご教授お願いいたします。

1   名前: Bill閣下 : 2005/09/23 19:19
HTMLの仕様では、
TEXTAREAの中身は#PCDATA(Parsed Character Data)、
つまりSGML的にParsedされる文字データで、
実態参照は展開されて対応する文字に置き換えられます。
&nbsp;を使用しても妥当です。
<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->

送信されたデータをどのように処理するのかは
HTMLの仕様の範疇ではないと思います。
http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.3
の下の方に
Note. Further discussion on the behavior of servers that receive form data is beyond the scope of this specification.
と書かれてあります。

2   名前: 愛浦憂馬 : 2005/09/23 19:19  [URL
よくは分からないんですが・・

「&amp;nbsp;」  とか
「半角スペースをそのまま混ぜる」 とかではどうですか?

3   名前: Strata : 2005/09/23 19:19
Bill閣下さん、丁寧なご説明ありがとうございます。リンク先の方、参照させていただきました。
HTMLの仕様上問題なしとの事ですが、現在の環境(IE6.0の送信データをPerl5.8で処理)ではテキストエリアに元から含まれる &nbsp; と後から入力した &nbsp; の区別が付かないので、
やはり通常の半角スペースを記述することにします。

愛浦憂馬さん、ありがとうございます。
この場合、後者の「半角スペースをそのまま混ぜる」のが適当みたいです。

4   名前: Pid : 2005/09/23 19:19
そもそも &nbsp;(U+00A0,&#160;)はいわゆる半角スペース(U+0020)ではありません。


> 半角スペースの場合は実体参照の文字列「&nbsp;」がそのまま送信されて

というのはちょっと信じられなかったので,テストしてみました。

【前提】
>>0 は method="get",もしくは method="post" enctype="x-www-form-urlencoded" の場合の話である。
・スペースは + で置き換えられる。
(→ http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/interact/forms.html#h-17.13.4.1

【実験】
<!-- 「小なり記号・スペース・非改行空白・スペース・大なり記号」を,UA がどうパーセント符号化するか実験 -->
<form action="#test" method="get">
<p>
<textarea cols="20" rows="10" name="test">&lt; &nbsp; &gt;</textarea>
<input type="submit" value="Submit" />
</p>
</form>

【結果】
(a) は ISO-8859-1,(b) は Shift_JIS/EUC-JP の場合,(c) は UTF-8 の場合。

Netscape Navigator 4.0.7
-(a). %3C+++%3E
-(b). %3C+++%3E
-(c). %3C+++%3E

Gecko(Mozilla 1.7,Firefox 1.0.4,Epiphany 1.4.8)
-(a). %3C+++%3E
-(b). %3C+++%3E
-(c). %3C+%C2%A0+%3E

MSIE win5.5, win6.0
-(a). %3C+%A0+%3E
-(b). %3C+%26nbsp%3B+%3E
-(c). %3C+%C2%A0+%3E

Konqueror 3.3.2(Safari も?)
-(a). %3C+%A0+%3E
-(b). %3C+%26%23160%3B+%3E
-(c). %3C+%C2%A0+%3E

Opera 7.5.3
-(a). %3C+%A0+%3E
-(b). %3C+%26%23160%3B+%3E
-(c). %3C+%C2%A0+%3E

Amaya 8.5
-(a). %3C+%A0+%3E
-(b). %3C+%00+%3E
-(c). %3C+%C2%A0+%3E

Lynx 2.8.5
-(a). %3C+%A0+%3E
-(b). %3C+%A0+%3E
-(c). %3C+++%3E

w3m 0.5.1
-(a). %3C+++%3E
-(b). %3C+++%3E
-(c). %3C+++%3E

私としては &nbsp; を %A0(%C2%A0)と解釈してほしかったのですが,スペースと同一視する実装もあるのですね。少なくとも MSIE で「Shift_JIS/EUC-JP の場合に」nbsp という文字列が出て来るのはバグ(でなければ手抜き実装)のような気がします。Konqueror/Opera も微妙なので,今のところ &nbsp; は避けた方が良いのかもしれません。

5   名前: Strata : 2005/09/23 19:19
Pidさん、大変分かりやすいご解説ありがとうございます。

&nbsp; と半角スペースを完全に混同していました。すみません。
同じ実態参照なのに &nbsp; だけ他のものと扱いが異なるのには何か特殊な理由があるのでは?と暫く引っ掛かっていたのですが、
単にブラウザによって仕様の解釈が違う(もしくはバグの)ケースなんですね。お陰さまで疑問がとけました。

一覧へ戻る