ネタバレや腐臭発言が混じるらくがきメモ
全カテゴリ表示
ドラクエ
三国志
アンジェ
ワンピース
nicky
その他
■
2008年11月21日(金) 日記内検索日記
こんなの毎日書くなら休止してた方がいいような気がする日記。
検索です検索。マルチバイト文字の2バイト目と次の字の1バイト目が組み合わさって誤検出みたいになるあれ。「せ」(\xA4\xBB)で検索すると「気持ち」(\xB5\xA4\xBB\xFD\xA4\xC1)がひっかかってしまう問題。
あれってなんか本文も検索ワードも1文字(2バイト)ずつ区切った上で検索し、しかるのち元に戻す…みたいなことをしなればならないらしいですね。びっくりした。すごいなー! つまり検索エンジンとかはそういうことをしてると…! あの膨大なページの内容を1文字1文字区切ってると! うわー。それともそれはEUCだけなのかしら。でもはてなダイアリーとかEUCですよね。つまりはてな検索はきっと全ダイアリーを区切っている…一文字ずつ! すごいなー!
けどここの日記内検索でそれ実際やってみたら重くなったのでやめた。まあ1文字で検索しなければほぼないことだし、使うの自分だからいいよ(それ言ったら終わる)
でもハイライトをつけた時に文字化けするのはあれなので、ハイライトonの時だけそれにした。にしてもハイライトって面倒なものだったんだなあ。文字化けもそうだけど、全角アルファベットの大文字小文字が検索ワードと違う時にどうやってハイライトのタグを付けるのかという心からどうでもいいけど片づかないと気になってしまう問題に悩んだ今日でした。
結局本文の英数字を半角に変換して、変換する時にマークをつけておいて、検索してハイライトのタグをつけ、そしてマークのとこだけ全角に戻す、てやったけどこれ絶対間違ってるよね。こんな無駄なことをみんながしているわけがないもの。日記内検索のハイライトを担当する部分だけで、
こんな長さに
sub NickySerchLight{
my($zha,$zhb,$zhc,$zhd,$hi);
($SWord[$_],$cword) = @_ ;
$zha = qr{(?<!\x8F)};
$zhb = qr{(?=(?:[\xA1-\xFE][\xA1-\xFE])*(?:[\x00-\x7F\x8E\x8F]|\z))}x;
$zhc ="<<z_h>>";
$zhd ="<<\/z_h>>";
$Message =~ s/$zha\xA3([\xB0-\xB9\xC1-\xDA\xE1-\xFA])$zhb/$zhc.pack("C", ord($1) - 0x80).$zhd/oeg;
$Message =~ s/$zhd$zhc//g;
$Title =~ s/$zha\xA3([\xB0-\xB9\xC1-\xDA\xE1-\xFA])$zhb/$zhc.pack("C", ord($1) - 0x80).$zhd/oeg;
$Title =~ s/$zhd$zhc//g;
$Title =~ s/([\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])/$1\n/g;
$Message =~ s/([\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])/$1\n/g;
for($hi = 0; $hi<$cword; $hi++){
$SWord[$hi] =~ s/([\x8E\xA1-\xFE][\xA1-\xFE])/$1\n/g;
$Message =~ s/($SWord[$hi])/<span class=\"hili\">$1<\/span>/ig;
$Title =~ s/($SWord[$hi])/<span class=\"hili\">$1<\/span>/ig;
1 while $Title =~ s/(<[^>]*)(<span class=\"hili\">)([^<]*)(<\/span>)/$1$3/ig;
1 while $Message =~ s/(<[^>]*)(<span class=\"hili\">)([^<]*)(<\/span>)/$1$3/ig;
$SWord[$hi] =~ s/\n//g;
}
$Message =~ s/$zhc<span class=\"hili\">/<span class=\"hili\">$zhc/g;
$Message =~ s/<\/span>$zhd/$zhd<\/span>/g;
1 while $Message =~ s/($zhc[0-9A-Za-z])([^$zhd])/$1$zhd$zhc$2/g;
$Message =~ s/$zhc([0-9A-Za-z])$zhd/pack("C*", 0xA3, ord($1) + 0x80)/eg;
$Title =~ s/$zhc<span class=\"hili\">/<span class=\"hili\">$zhc/g;
$Title =~ s/<\/span>$zhd/$zhd<\/span>/g;
1 while $Title =~ s/($zhc[0-9A-Za-z])([^$zhd])/$1$zhd$zhc$2/g;
$Title =~ s/$zhc([0-9A-Za-z])$zhd/pack("C*", 0xA3, ord($1) + 0x80)/eg;
$Title =~ s/\n//g;
$Message =~ s/\n//g;
}
ありえないよ。無知は悲劇、みたいなのを地でいくようなことをしてるんでしょうね
<< nicky改造日記。日記内検索編
|
TOP
|
ドラクエ1(借財) >>
>>>
2017年
05月
06月
2015年
03月
08月
2011年
01月
02月
07月
2010年
01月
02月
03月
04月
05月
06月
07月
12月
2009年
01月
02月
03月
04月
05月
06月
07月
08月
12月
2008年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2007年
01月
02月
03月
04月
09月
12月
2006年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2005年
11月
12月
月別ログ
元に戻す
日記内検索機能
RSS
PaintBBS / spainter
Shi-dow
Diary CGI
Nicky!
+
rssnicky