# PRE タグ検知フラグ
my $pre_tag_flag = 0;
# バッファ
my $wd_tmp;
# \n (LF) でぶつ切りにする
# \r? は \r (CR) が無くてもおkという事
foreach my $line (split(/\r?\n/, $wd)) {
# <PRE> タグの扱いは特殊。この順序と if の使い方が大事。
# まずは <pre> もしくは <pre style=""> などが含まれる文字列を見つけた場合は PRE タグ検知フラグを立てる。
if ($line =~ /<pre( .*?)?>/) { $pre_tag_flag = 1; }
# PRE タグ検知フラグが立っているか、もしくは $regex で指定したタグが見つかれば BR タグは付けない。
if ($pre_tag_flag || $line =~ /<\/?($regex .*?|$regex)>$/) { $wd_tmp .= "$line\n"; }
# そうで無い場合は BR タグを付ける。
else { $wd_tmp .= "$line<br>\n"; }
# もし /PRE タグが見つかれば PRE タグ検知フラグをクリア。
if ($line =~ /<\/pre( .*?)?>/) { $pre_tag_flag = 0; }
}
# バッファの内容をメインバッファに移す。
$wd = $wd_tmp;
旧型 | 新型 |
---|---|
1.35 sec | 0.45 sec |
1.35 sec | 0.43 sec |
1.34 sec | 0.44 sec |
1.38 sec | 0.46 sec |
1.34 sec | 0.45 sec |
1.35 sec | 0.45 sec |
1.00 倍 | 3.03 倍 |
# まずはつっこみの新しい順にグループ化したターゲット番号を 10個拾う my $mysql_query = "SELECT target FROM tsukkomi GROUP BY target ORDER BY lastupdate DESC LIMIT 0,10"; my $mysql_sth = execute_query($mysql_db, $mysql_query); my @TARGET_LIST; while (my $TMP_HASH = $mysql_sth->fetchrow_hashref) { push(@TARGET_LIST, $TMP_HASH->{target}); } $mysql_sth->finish; # 次にそのターゲット番号の記事タイトルを取る $mysql_query = join(', ', @TARGET_LIST); $mysql_query = "SELECT num,title FROM diary WHERE num IN ($mysql_query)"; my $mysql_sth = execute_query($mysql_db, $mysql_query); my %TITLE_LIST; while (my $TMP_HASH = $mysql_sth->fetchrow_hashref) { $TITLE_LIST{$TMP_HASH->{num}} = $TMP_HASH->{title}; } $mysql_sth->finish; # 最後に配列として保存。連想配列にしてしまうと順序がわからなくなる。(汗) my @RET_LIST; foreach (@TARGET_LIST) { push(@RET_LIST, "$_<>$TITLE_LIST{$_}"); } # 最後の締め。 $mysql_db->disconnect; return @RET_LIST; |
s/("|'|\\)/\\$1/g;ちなみにこの変換用ルーチンをブロック単位で作っているが、フォームデータをそのまま利用する場合もあるので get_formdata() にそのまま放り込むわけにも行かず。
mode=edit&num=15などとして編集画面に入ろうとしても、「ログオン認証が済んでいない」と警告を出すようにした。
SELECT * FROM diary LIMIT *,5とやったら日付を跨いで切ってしまうことも。
SELECT * FROM diary WHERE date BETWEEN 'YYYYMMDD_start' AND 'YYYYMMDD_end'とやろうとすると、抜き出し開始の日付の部分を取り出さないとだめだが、MySQL はサブクエリーをサポートしてないので結構大変かも。
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ 山銀
└ G兄