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

Re: No such anchor for %-escaped fragment identifier



反応が遅くなってしまいすみません。青田です。

Tetsurou Okazaki <okazaki@xxxxx> writes:

> 関数 w3m-fontify-anchors では、id 属性や name 属性の値を encode + %-escape して
> テキストプロパティ 'w3m-name-anchor や 'w3m-name-anchor2 に追加していますが、
> 'w3m-href-anchor には href 属性の `#' 以下が decode された状態のままで登録されます。
>
> そのため、%-escape された non-ASCII 文字を含んでいる id / name 属性を持つ要素
> へのリンクを辿ろうとすると
>
>  No such anchor: ほげほげ
>
> とメッセージが出て追跡に失敗します。

これは例えば以下のような html で "ほげへ"のリンクをたどれない、ということ
であっていますか?

.-------------------------------------------------------------------------------
|<html>
|<head></head>
|<body>
|<a href="#ほげ">ほげへ</a>
|<a id="ほげ">ここがほげ</a>
|</boyd>
|</html>
`-------------------------------------------------------------------------------

これでしたら、確かに w3m-href-anchor では decode されていますが
w3m-goto-url の以下の部分により encode されています。

.-------------------------------------------------------------------------------
|  (unless (or (w3m-url-local-p url)
|	      (string-match "\\`about:" url))
|    (setq url (w3m-url-transfer-encode-string url
|					      (or w3m-current-coding-system
|						  w3m-default-coding-system))))
`-------------------------------------------------------------------------------

それで、 non-ASCII な文字を含むアンカーの検索に失敗することは前からなんと
なく気がついていたので、この機会にそこらへんを追ってみました。結局、以下
の2点が問題になっていたようなので直しておきました。

1. w3m-current-coding-system ではなく w3m-default-coding-system を
   encode に使用していること。
2. local な url の時に name 部分が encode されていなかったこと。

;; せっかくなので emacs-w3m-ja.texi や w3m-ignored-image-url-regexp も
;; commit しました

--
青田