過去ログ表示


過去ログ 303 を表示

トピック内全 5 記事中の 1 〜 5 番目を表示
[ 最新記事及び返信フォームをトピックトップへ ]
このトピックの全ページ / [0]

<option>のvalue値の先頭のタブ文字が無視される
(#46975) このトピック中1番目の投稿
(環境: WinXP SP2/Other)

はじめまして、krzと申します。
フォームでHTMLに入れた値を読み取るCGIを作成しているのですが、
<option>のvalue値の先頭のタブ文字が無視される問題が発生して困っています。
今確認している限りではFireFox以外のブラウザでは発生しない問題なのですが、
これは仕様なのでしょうか。バグなのでしょうか。


------------------------------------------------
<form method="post" action="that.cgi">
.
.
<select name="hoge">
<option value="\tAAAA">エーエーエーエー</option>
</select>
.
.
.
</form>
------------------------------------------------
hogeに入ってくる値:AAAA(Gecko/2009011913 Firefox/3.0.6 Pathtraq/0.9の場合)
hogeに入ってくる値:\tAAAA(IE6, GoogleChrome1.0.1, Opera9.63 の場合)


※ \t は実際にはタブ文字が入ります。

Re[1]: <option>のvalue値の先頭のタブ文字が無視される
(#46985) このトピック中2番目の投稿
(環境: WinXP SP3/SeaMonkey1.1)

> <option>のvalue値の先頭のタブ文字が無視される

HTML 4.01における仕様の記述:

http://www.w3.org/TR/html401/interact/forms.html#adef-value-OPTION
> 17.6 The SELECT, OPTGROUP, and OPTION elements
>(snip)
> OPTION Attribute definitions
>(snip)
> value = cdata [CS]
であり、
http://www.w3.org/TR/html401/types.html#type-cdata
> 6.2 SGML basic types
>(snip)
> * CDATA is a sequence of characters ... (snip)
>(snip)
> o Replace each carriage return or tab with a single space.
> User agents may ignore leading and trailing white space in CDATA attribute values
> (e.g., " myval " may be interpreted as "myval").
> Authors should not declare attribute values with leading or trailing white space.

value="¥tA¥tB¥tC¥t"だと、Firefixの場合、以下のスクリプトで「A%09B%09C」が返ってきました。
javascript:alert(escape(document.getElementById('...').value));
HTMLでは、必ずしもSGMLの規則が適用されるわけではないので、HTABを空白で置き換えることまではしていないようです。
「may ignore」で「white space」(space・0x20、ではない)だから、Firefoxは除去しているのでしょう。
「Authors should not」で「leading or trailing white space」ですから、
この場合は、HTML 4.01に違反しているのはHTMLを書いた人、ということになります。

HTML 5ではSGMLの規則から離れて仕様が書かれ、CDATAに関しては「タグの終了」を意味するバイト列以外は何でも可、という規則になるみたいです。
(ただし、0x00やいくつかの制御文字はもっと前に禁止されている)
> http://dev.w3.org/html5/spec/Overview.html#cdata-rcdata-restrictions
そして、属性値では、attribute_name="..."を例にとると、ダブルクォート以外は全て属性のデータとして取り出す、という規則になっています。
> http://dev.w3.org/html5/spec/Overview.html#attribute-value-double-quoted-state
> http://dev.w3.org/html5/spec/Overview.html#character-reference-in-attribute-value-state
ただし、その先の、属性のデータとして取り出したものの取り扱い(HTAB,CR,LFなどをどのように扱うかなど)については、未だに規則を発見できず...
DOMオブジェクトのある属性のデータとして保持されることになるので、そちらでの制限になるかも。

IE7あるいはIE8、Opera 10(まだベータ)だとどうなりますか?
Firefoxで強制的にHTML 5として解釈させるのは、どうすればいいのかな?

Re[2]: <option>のvalue値の先頭のタブ文字が無視される
(#46989) このトピック中3番目の投稿
(環境: WinXP SP3/IE6)

WADAさん、ご返信頂き有難うございます。
じっくり読ませて頂きました。

先ほど、すでにバグ報告されているのを見つけたのでそれで報告しようと思ってきました。
https://bugzilla.mozilla.org/show_bug.cgi?id=430455


しかしながら、バグではなく仕様だったのですね。
 (あるいは white space の解釈の仕方の違いでしょうか(\s or %20)

> User agents may ignore leading and trailing white space in CDATA attribute values
> (e.g., " myval " may be interpreted as "myval").


しかし、その仕様ならしょうがないと思って、
試しにご提示頂いたサンプルコードをちょっと変えて走らせてみたら困った結果が;;

----------------------------
<select id="test">
<option value=" A\tB\tC\t">aaa</option>
</select>
<script>
javascript:alert(escape(document.getElementById('test').value));
</script>
----------------------------
結果:%20A%09B%09C
※ \tは実際はタブ文字です。


だったら、%09も許してあげてください。なんて。

Re[3]: <option>のvalue値の先頭のタブ文字が無視される
(#46992) このトピック中4番目の投稿
(環境: WinXP SP3/SeaMonkey1.1)

> <option value=" A\\tB\\tC\\t">aaa</option>
> javascript:alert(escape(document.getElementById('test').value));
> 結果:%20A%09B%09C ※ \\tは実際はタブ文字です。
> だったら、%09も許してあげてください。なんて。

HTAB(0x09)とSpace(0x20)で動きが異なるのは、XULでも同じロジックを使っていてHTABがあると不都合があったりして、それでHTABだけ除去、ということかもしれません。
明確な規定が無い部分ですから、運用上困るのでIEなどと同じ動作にしてほしい、というのは、正当な「bugzilla.mozilla.orgにおけるバグ報告」になります。
コードがデザイン通りでない問題(クラッシュするとか)のような、一般的な意味での「バグ」ではありませんが。

ただし、Firefoxの動作は、HTML 4.01に違反しているわけではありません。
前にも書いたように、HTML 4.01に違反しているのは、HTMLを書いた人。
HTML 5では、必ずしも全てのブラウザーが尊重してくれているわけではないSGMLの規則、
必ずしも全てのブラウザー開発者がきちんと理解しているわけではないSGMLの規則、
からは離れて、デファクトスタンダードを仕様として規定していこう、という方針のようですから、
(例:<!-- と --> の間の--の扱い、Content-Sniffing)
今回のケースでは、仕様としては、先頭や末尾のHTABもそのまま属性値として保持する、になりそうな気もします。
HTML 5やDOM 3などの仕様をきちんと調べて、Bug 430455で「HTML 5に違反しているぞ」と脅すほうが早いかもしれません(^_^)

Re[4]: <option>のvalue値の先頭のタブ文字が無視される
(#46995) このトピック中5番目の投稿
(環境: WinXP SP3/IE6)

>HTML 5やDOM 3などの仕様をきちんと調べて、Bug 430455で「HTML 5に違反しているぞ」と脅すほうが早いかもしれません(^_^)

脅すってのは恐れ多いですが Cool
説得力と言う意味で、%20は通るのに〜、とか、HTML5ではこうなのに〜
みたいな感じで Bug 430455 を応援する方向で行きたいと思います。

いろいろ教えて頂きましてありがとうございました。
済!

このトピックの全ページ / [0]

返信不可


- Child Tree -