FirefoxのURI属性値における数値参照の解釈がおかしい
2chスレッド Proxomitron フィルター作成スレッド Part7 の書き込みを見て、気がついたFirefoxの動作メモです。
36 :名無しさん@お腹いっぱい。 < sage > :2007/11/02(金) 00:37:16 ID:l+Xvx/fa0
URIを「 &#十進数; 」の羅列で表記して隠してるページがあるんだけど
どうやったら普通の文字に変換できますか?
「 %十六進数 」は>>834みたいにすればいいのは解るんですが。
多分、数値参照文字を書くときに & までエスケープ (&) して、数値参照表記を表示させているのだと思います。
この場合、ソースは以下のようなものが考えられます。
# リンクまで変なのは、不特定多数の掲示板に投稿された場合を考慮しての事。
<a href='http://prx.testing.com?test=&#80;&#114;&#111;&#120;&#111;&#109;&#105;&#116;&#114;&#111;&#110;'>
http://prx.testing.com?test=&#80;&#114;&#111;&#120;&#111;&#109;&#105;&#116;&#114;&#111;&#110;'>
<a>
こうなると、数値参照で使われているアンバサンド (&) がエスケープされているため、数値参照としては機能しない「はず」です。
が、Firefox 2.0.0.9 で動作確認をすると、内部動作で「 &#十進数; 」と同等に解釈されるのか、正常なリンクとして機能してしまいます。
IE7 はエスケープ前の「 &amp;#十進数; 」として解釈するため、不正なリンクとして動作します。
これはIE7の解釈の方が正しい気がするのですが……。
IE7で正常なリンクとして扱われるためには、& を & に変換して、本来の数値参照に直す必要があります。
以下は、a要素のhref属性値限定で &
を &
に置換するProxomitronのフィルタです。
[Patterns]
Name = "&#n; to char for URL Link [2007/11/23] test1"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 256
Match = "(<a\s[^>]++href=)\#$AVQ(((*\&)\#amp;(#[#0:9999];)\#)+{1,*}\#)(^(^[ >]))"
Replace = "\@"
リンクが貼られていない文字列を置換するなら、URLテキストをリンク化するフィルタ http Text to Link で上のフィルタと同じことを行えば、実現できると思います。
ラベル: Firefox, Proxomitron, フィルタ, 不具合
0 件のコメント:
コメントを投稿
登録 コメントの投稿 [Atom]
<< ホーム