url

url

input type url (HTML)

[4] HTMLinput 要素type 属性url とすると、 IRI を指定するフォーム制御子となります。

URL という言葉を名前に使っていますが、 実際には任意の IRI を扱うことができます。

[5] 仕様書:

値の構文

[6] RFC 3987IRI (生成規則 IRI) です。 従って、相対IRI参照は認められません。 WF2 2.4

[3] IDN を使用して構いません利用者エージェントIDNA 符号化せずに、 元々入力された通りのドメイン名提出するべきですWF2 2.4

[9] 利用者エージェントは、 利用者相対IRI参照やその他の IRI としては不完全な値を入力することを認めても構いません。 しかし、 isTypeMismatch の判定やフォーム提出に用いる値は絶対IRIでなければなりません。 WF2 2.4

[10] 利用者エージェントは、 IRI 生成規則一致する任意の文字列を受け付けしなければなりません文字の並びが論理順であることなどの IRI の仕様上の非構文的制約を利用者エージェントが検査する必要はありません。 WF2 2.4

互換性

[13] 未対応利用者エージェントとの互換性

month に対応していない利用者エージェントは、 text (単一行文章入力制御子) として扱います。従って、利用者は任意の文字列を入力することができます。

ですから、著者は、対応している利用者エージェントが一般的になるまでの間、 フォーム制御子の近くで記入方法を説明しておくのがよいでしょう。 フォーム処理エージェントは記入された値が適当か検査するべきです (これは安全性の観点からも重要です)。

歴史

[10] この input typeWeb Forms 2.0 で導入されました。

[19] 当初は uri という名前で提案されていましたが、 CSSurl() 関数をはじめ、 Web では URL という名前が伝統的によく用いられてきたことから、 Web Forms 2.0 でも url という名前に改称されました。

[20] input type urlOpera 9 がはじめて実装しました。

実装

[11] Opera 9 が実装しています。

メモ

Refresh:url 引数 (HTTP)

[2] 飛び先の URL を指定します。省略した場合は当該実体URI と仮定します。つまり再読み込みとなります。

詳しくは Refersh: 欄の項を参照。

META 要素 URL 属性 (HTML)

[1] WebTV のリファレンスにそれっぽく登場しますが、実在が強く疑われます。 <http://web.archive.org/web/20000523161756/developer.webtv.net/authoring/html/meta.html>

説明を読むとどうも、 Refresh:http-equiv で使った時の content 属性の値の内部にある URL パラメーターのことを指しているように思われます。

HTML 2.0 に由来するなんて書いてありますが、 RFC1866 にはそんなものありません。

url() 関数 (CSS)

[14] CSS関数の中で、 url だけは字句解析の段階で特別扱いされています。 関数名は、他の関数ident として定義されているので \ による escape が可能ですが、 url では使えません。

[15] >>14Opera 9 は正しく実装していますが、 Firefox 1.5 と WinIE 6 は escape されていてもおkです。

[16] >>14-15 あ、でも、 URI にならないかわりに、 FUNCTION, ... にはなるのか・・・。 字句 URICSS の構文定義にでてくる <uri> の関係が実は明記されていないから、 FUNCTION, ... だけど <uri> である、という解釈も可能?

The format of a URI value is 'url(' followed by ... だからやっぱだめ?

[17] Firefox 2.0's implementation:

  1. Let u be an empty string.
  2. Let invalid be false.
  3. Unless the string starts by an ident with value url (case-insensitive, escape is allowed, \ followed by a newline is ignored), immediately followed by a (, it is not a URI. Stop these steps.
  4. (WS) Skip any white space characters.
  5. If the next two characters are /*,
    1. Skip any character until */ is found.
    2. If the substring */ is found,
      1. If the following characters are not a white space character or /*, set invalid as true. Don't consume these characters yet.
      2. Go to the previous step in the overall steps (i.e. WS).
    3. Otherwise, i.e. if the next character is EOF, the URI is invalid. Stop the entire steps.
  6. If the next character is ",
    1. Appends any character until " to u, with any escape decoded and any \ followed by a newline ignored.
    2. (DWS) If the next character is a white space, set u as that character (!).
    3. If next few characters are white spaces, skip them.
    4. If the next character is /*,
      1. Skip any character until */.
      2. If the next character is EOF, the URI is inlvaid. Stop the entire steps.
      3. Otherwise, go to the step named as DWS.
    5. If the next character is ), go to the step named as CP.
    6. Otherwise, set invalid as true.
    7. Skip any character until ) (including ) following \ but excluding ) after " or ' but before " or ' matching it).
    8. If the next character is EOF, the URI is invalid. Stop the entire steps.
    9. Otherwise, go to step named as CP.
  7. If the next character is ',
    1. Appends any character until ' to u, with any escape decoded and any \ followed by a newline ignored.
    2. Go to the step named as DWS.
  8. (CP) If the next character is ),
    1. If invalid is true, then the URI is invalid. Stop the entire steps.
    2. Otherwise, return a URI whose value is u]].
  9. If the next character is " or ', set invalid as true.
  10. If the next character is a white space,
    1. Skip any white space characters.
    2. If the next character is ), go to the previous step in the overall steps (i.e. CP).
    3. Otherwise, set invalid as true.
  11. If the next character is \,
    • decode a few character as escape and append it to u, or skip whitespace if it immediately follows the \.
  12. If the next character is EOF, the URI is invalid. Stop the steps.
  13. Go to the step named as CP.

[18] Opera 9.00 seems to parse URI as specified in CSS 2.1.

However, it post-process URI values as:

[21] WinIE 6 の実装は複雑怪奇です。

[22] Re: [css3-namespace] url() syntax (fantasai 著, 2006-10-01 08:54:25 +09:00 版) <http://lists.w3.org/Archives/Public/www-style/2006Oct/0006.html> (名無しさん)

[23] [css3-namespace] url() syntax (Anne van Kesteren 著, 版) <http://lists.w3.org/Archives/Public/www-style/2008Feb/0059.html> (名無しさん)

メモ

[24] HTML5 Revision Tracker ( 版) <http://html5.org/tools/web-apps-tracker?from=5064&to=5065>

[25] IRC logs: freenode / #whatwg / 20100502 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20100502#l-105>

[26] Basic Data Types and Interfaces – SVG 1.1 (Second Edition) ( ( 版)) <http://www.w3.org/TR/2011/REC-SVG11-20110816/types.html#DataTypeFuncIRI>