[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Why `w3m-check-refresh-attribute' decodes entities in url?
- From: TSUCHIYA Masatoshi <tsuchiya@xxxxxxxxxx>
- Date: Fri, 21 Sep 2007 22:25:57 +0900
- X-ml-name: emacs-w3m
- X-mail-count: 09635
- References: <b4mwsukp8xj.fsf@jpl.org>
>> On Fri, 21 Sep 2007 20:14:16 +0900
>> yamaoka@xxxxxxx (Katsumi Yamaoka) said as follows:
>`w3m-check-refresh-attribute' は meta タグで refresh を指定されたときに
>飛び先の url を抽出するための関数です。
>`w3m-check-refresh-attribute' は `w3m-decode-entities-string' でこれをデ
>コードするので、"&part" の部分が "∂" のような文字に変換されてしまいます。
>それを含む url にアクアセスする際にエンコードされますが、元の url と同じ
>にはなりません[3]。
>Meta タグが指定するリダイレクト先の url 文字列は、そのまま使えば良いと思
>うのですが、いかがなものでしょう?
むう.
HTML4 規格邦訳によれば,META要素と content の値については,以下のように定
義されているのですね.
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/struct/global.html#h-7.4.4.2
<!ELEMENT META - O EMPTY -- generic metainformation -->
<!ATTLIST META
%i18n; -- lang, dir, for use with content --
http-equiv NAME #IMPLIED -- HTTP response header name --
name NAME #IMPLIED -- metainformation name --
content CDATA #REQUIRED -- associated information --
scheme CDATA #IMPLIED -- select form of content --
>
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/types.html#type-cdata
・ CDATAは、文書文字集合中の任意の文字の列であり、文字実体をも含む。ユーザエー
ジェントは、この属性値を次のように解釈する必要がある。
□ 文字実体は文字で置き換える。
□ 改行文字LFは無視する。
□ 個々の改行文字CRあるいはタブ文字は、1つの空白文字で置き換える。
なので,文字実体参照は decode するのが規格的には正しいのではないかと思い
ます.
で,今回の場合は何が問題かというと,
∂
のように,きちんと ; で終端されているわけでもない
&part
まで decode してしまっているのが問題なのではないでしょうか.
対応はどうしたらいいかなあと code を追いかけ始めたら,w3m-decode-entities()
とか w3m-entity-value() のコードまで整理したくなってきて,頭が混乱してき
ました.‥‥なんで,こんなにややこしい構造になってるんでしょう?
--
土屋 雅稔 ( TSUCHIYA Masatoshi )