[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: cannot follow link



坂本です。

> From: ari@mbf.sphere.ne.jp (Akihiro Arisawa)
> > 特殊文字(<, >, ", &)は & で実体参照してエスケープします。
> # href 属性の場合は属性値は URI なので事情が変わりますよね。
> # " は URI では %22 と encode しなきゃいけないから、
> # <a name="hoge&quot;hoge" href="#hoge%22hoge"> とかが正しいのかな。

href="#hoge&quot;hoge" でも name="hoge%22hoge" でもかまいませんが、
現在の w3m 本体(や手元の lynx-2.8.2dev.2, nesscape-4.07 )は、
name/href 属性の hoge&quot;hoge と hoge%22hoge は別のものとみなして
しまいます。

HTML の & での実体参照は文字コード(エンコーディング法)に依存しない、
すなわち文字集合(=Unicode)中の文字を直接指定するのに対し、
URI の % でのエンコードは文字コードに依存する、すなわちバイト値を
直接指定します。
# &quot; (&#x22) は Unicode の 0x0022 だが文字列中のバイト値
# として 0x22 だけで表わされるとは言えないし、
# %22 は文字列中のバイト値 0x22 だが Unicode の 0x0022 を表す
# とは言えないということ。

従って、(リモートの locale に依存するかもしれない) URI 中では
% を使うべきですし。URI 中で fragment (label) 部分で指定される
name 属性の値も % を使うべきです。
# URI 中の path 部分は リモートの locale の文字コード扱いで
# fragment 部分(name 属性)はドキュメントの文字コード扱いなんでしょうね。

# この辺りを考慮したのか、HTML の id 属性の値は
# REC-html40/types.html#type-id では、
#   ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed
#   by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"),
#    colons (":"), and periods (".").
# となっていますね。(NAME は name 属性とは関係なし)
-------------------------------------------
Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
 http://www2u.biglobe.ne.jp/~hsaka/