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

Re: Why `w3m-check-refresh-attribute' decodes entities in url?



>> 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;

のように,きちんと ; で終端されているわけでもない

    &part

まで decode してしまっているのが問題なのではないでしょうか.

対応はどうしたらいいかなあと code を追いかけ始めたら,w3m-decode-entities()
とか w3m-entity-value() のコードまで整理したくなってきて,頭が混乱してき
ました.‥‥なんで,こんなにややこしい構造になってるんでしょう?

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )