2007年11月25日日曜日

JavaScriptでProxomitronで数値文字参照を実体に変換するブロックリストを出力2

JavaScriptでProxomitronで数値参照を実体に変換するブロックリストを出力を更新しました。
更新点は以下の通り。

  • 入力フォームから、開始値/終了値を入力できるようにした
  • 数値文字参照の書式を10進数/16進数から選択できるようにした
  • コードの整理

開始値/終了値には10進数の数値を入れてください。
16進数値を入力しても、動作しません。

改行等の空白文字として「9-13」、ASCII文字として「32-126」をリスト化すれば、半角文字は網羅できそうです。

ラベル: ,

2007年11月23日金曜日

JavaScriptでProxomitronで数値文字参照を実体に変換するブロックリストを出力

数値文字参照をProxomitronで扱うために、実体に変換するブロックリストを出力するJavaScriptを組んでみました。
# 出力された内容は、ReplaceStr: BlockListのブロックリストとして機能します。

JavaScriptは外部JSとして宣言してあるので、興味のある方はHTMLソースから辿ってみてください。
数値文字参照の開始番号/終了番号はJavaScriptコード内で変数宣言しています。
入力フォームは暇を見て作るかもしれません。

ラベル: ,

FirefoxのURI属性値における数値参照の解釈がおかしい

2chスレッド Proxomitron フィルター作成スレッド Part7 の書き込みを見て、気がついたFirefoxの動作メモです。

36 :名無しさん@お腹いっぱい。 < sage > :2007/11/02(金) 00:37:16 ID:l+Xvx/fa0
URIを「 &#十進数; 」の羅列で表記して隠してるページがあるんだけど
どうやったら普通の文字に変換できますか?
「 %十六進数 」は>>834みたいにすればいいのは解るんですが。

多分、数値参照文字を書くときに & までエスケープ (&amp;) して、数値参照表記を表示させているのだと思います。
この場合、ソースは以下のようなものが考えられます。
# リンクまで変なのは、不特定多数の掲示板に投稿された場合を考慮しての事。

<a href='http://prx.testing.com?test=&amp;#80;&amp;#114;&amp;#111;&amp;#120;&amp;#111;&amp;#109;&amp;#105;&amp;#116;&amp;#114;&amp;#111;&amp;#110;'>
http://prx.testing.com?test=&amp;#80;&amp;#114;&amp;#111;&amp;#120;&amp;#111;&amp;#109;&amp;#105;&amp;#116;&amp;#114;&amp;#111;&amp;#110;'>
<a>

こうなると、数値参照で使われているアンバサンド (&) がエスケープされているため、数値参照としては機能しない「はず」です。
が、Firefox 2.0.0.9 で動作確認をすると、内部動作で「 &amp;#十進数; 」と同等に解釈されるのか、正常なリンクとして機能してしまいます。
IE7 はエスケープ前の「 &amp;amp;#十進数; 」として解釈するため、不正なリンクとして動作します。
これはIE7の解釈の方が正しい気がするのですが……。

IE7で正常なリンクとして扱われるためには、&amp; を & に変換して、本来の数値参照に直す必要があります。
以下は、a要素のhref属性値限定で &amp;& に置換する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 で上のフィルタと同じことを行えば、実現できると思います。

ラベル: , , ,