ブログからの転載です。 メールアドレスを収集されにくくする方法のひとつに, mailto:〜の文字列を部分的に実体参照化するというものがあります。 十六進の文字コードを見ながら十進に直すのも面倒なので,マクロにしてみました。 = Entity.def v0.10 = *m 1 "entity" ?. (mb-2)?. ;文字ブロックのみ実行 mp[, ps[=pa, #G ps], mp], (mb)?{ &m("改行をまたいでいるようです") . } mi[-, &s mb=2, ux[+, #y ux], ax=$2C00, &i($21) rn=cx+dx, ; 時刻でrandomize &Sn(pa) l=r, i-, ps[=pa, #61 #< ;作業用入力窓(put2)に呼び出す :l &r (r%2 && r%3) ;6〜7割方の確率で変換 ?#d ?{ c=cd, #g &?("&#%d;",c) } (l>i++)?>l #m ;出力 :z ps], mi], &d . * うーん,注記するような技術的なものが何もない…。 …と思ったら,#61の出力時にpsのバッファの大きさを超えていると, 途中で切れちゃうじゃない。(^^; コリャダメダ うーん,作り直しだなぁ。バッファを別の大きなものにすり替えなきゃ。 ラインバッファも使えないか…。文字数を測っておいてジカにやるかな。
使ってみると,サッパリだめだったので作り直したのですが, 色々と粗が見えてきました。…というか,いまさら気付いたことも。 ブロック範囲って,単に mb を真にしただけでは再現しないんですね。 かと言ってサイレント中に &d を入れるわけにもいけないので,考えた末 #28 でラインバッファに入ってみることにしました。 = Entity.def v0.20 = by H_ear #if 0 実体参照変換(ブロック範囲をランダムに変換) 使用目的は mailto:で指定したアドレスを収集されにくくするため #endif * mad for vz! 1 ^\ "" ?. (mb-2)?{ &m("[!]mbモード確認.") . } (mr-$80)??{ &m("[!]mrモード確認.") . } mp[, ps[=pa, #G ps], mp], (mb)?{ &m("[!]改行を含んでいます.") . } &SF(pa,' ') (r)?{ &m("[!]空白を含んでいます.") . } &s mb=2, #28 (xc>0)?#B mb-, ;mbを指定するだけでは再現しない &Sn(pa) l=r, i-, ;paのサイズが上限 ax=$2C00, &i($21) rn=cx+dx, ;時刻を乱数の種に :l ; ---- main loop ----main loop (ck)?{ &m("全角文字があったので停止しました.") >z } &r (r%2 && r%3) ;6〜7割方の確率で変換 ?#d ?{ cd[, #g &?("&#%d;",0]) } (l>i++)?>l :z ; ---- exit ---- &d #] . * [Variables] l length i counter [Buffers] pa as ps [History] 2009/01/21 0.10 1st 2009/01/25 0.20 エラーチェックをそれなりに増やした [Notes] mbに代入するだけではブロックモードにならない #61の窓内部でpsのサイズを越えると出力時に途中で切れる