いくつかのサーバー側検証の開発で、Firefox、ChromeおよびInternet Explorerがinput type=text
フォームフィールドで異なる方法で垂直タブ文字を処理することを発見しました。
ブラウザーに文字を貼り付けるのに苦労したので、JavaScriptを使用して、次のようにテストフォームにテキスト入力を入力しました。
document.getElementById('theField').setAttribute('value', "hello\vthere");
この JSFiddle でクライアント側の違いのいくつかを見ることができます。
ブラウザの方法には違いがあります。
<pre>
タグのinnerHTMLを作成するために使用される場合、文字をレンダリングします以下の表は、私が見つけたものを示しています。
Browser | displayed | put into pre-tag | logged to console | received by server
------------------------------------------------------------------------------------
Chrome | hello | hellothere | hellothere | hello
------------------------------------------------------------------------------------
Safari | hello | hellothere | hellothere | hello
------------------------------------------------------------------------------------
Firefox | hellothere | hellothere | hellothere | hello
FF cont. | | | | there
------------------------------------------------------------------------------------
IE | hello there | hello there | hello | hello
IE cont. | | | there | there
------------------------------------------------------------------------------------
Opera | hellothere | hello | hello | hello
Op cont. | | there | there | there
コンソールには、各ブラウザーに組み込まれた開発者ツールを使用しました(JSFiddleをFirebugで動作させることができませんでした)。
このタイプのフォームフィールドでブラウザがこの文字を処理する方法についての仕様はありますか?もしそうなら、仕様は何で、どのブラウザがそれに従っていますか?
更新された回答
ブラウザーの値切り捨ての問題を解決するために働いたchrome開発者であるtkentは、WHATWG仕様が垂直タブ(U + 000B)が合法であり、さまざまなコンテキストで変更されるべきではないと述べました。入力type = textに関するこの質問に関連するものは次のとおりです。
VT文字は「その他」にあります。属性値にそのまま追加されます。
上記は、クロム問題トラッカーに関する 元のコメント からの抜粋です。
元の回答フォーム入力値の垂直タブを明確に禁止するHTMLまたはHTTP仕様が見つかりませんでした。しかし、間接的な情報に基づいて、Firefox、I.E。およびOperaはより正確に見えます。
入力値は、要素の属性値と考えることができます。この場合、属性値の定義に該当します。 HTML5ドラフト仕様。 属性値 「テキストにあいまいなアンパサンドを含めることはできないという追加の制限を除いて、テキストと文字参照が混在している」と述べています。
「 text 」および「 文字参照 」の定義では、特に垂直タブを除外していません。私の読書では、これが許可されていることを示唆しています。
また、クロム開発者は これは問題です に同意しており、それに対処するために取り組んでいます。
垂直タブ文字は、古典的なASCII空白文字(Unicodeなど)の1つであるため、HTMLは通常のテキストの1つのスペースに「折りたたむ」必要があります(white-space: normal
)。
Pythonコマンドラインセッションから:
>>> import string
>>> string.whitespace
'\t\n\x0b\x0c\r '
>>> string.whitespace == '\t\n\v\f\r '
True
>>> map(ord, '\t\n\v\f\r ')
[9, 10, 11, 12, 13, 32]
最近ではほとんど使用されないため、ブラウザは垂直タブ( '\ v')について何をすべきかわからない場合があります。固定幅の文字セットを使用した非グラフィカルプリンターの時代には、それがより重要だったと思います。しかし、それは合法的な文字です(簡単に入力できなくても、Webフォームの「通常の」タブ文字にも当てはまります)。