<< Prev Page Next Page >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


検索語をハイライトするPHP

おそるべしFC2ブログ。1ヶ月以上投稿しないとトップに広告載せちゃうゾという。わかったよ書くよせかすなよ。

ここ1ヶ月仕事ばっかりで朦朧として過ごしてた。そんなわけで、こんなプログラムはいかがか。

検索結果を色分けハイライトして、検索語の前後$span文字だけを切り取る。

まだ「前後$span文字」っていうところが適当な感じになってて、マルチバイトの文字をうまくカウントできない。mb_eregナントカとかやればいいのかな。それを解決する方法を私は思いついたがそれを記すには余白が少なすぎる。



/**
* 検索結果をハイライトして、見つかった単語の前後$span文字だけを表示する。
*
* @param string $text 検索結果文字列
* @param string $query 検索クエリ。スペースを挟んで複数でもOK。
* @param int $span 単語の前後$span文字を抜き出す
* @return string ハイライト済みHTML
*/
function smarty_modifier_hilight($text, $query, $span = 15) {
$hilighted = false;
if ($query) {
$colors = array('#FFFF00', '#00FFFF', '#FF00FF', '#F0F0F0');
$query = str_replace(' ', ' ', $query);
$q = preg_split('/[\s,]+/', $query, -1, PREG_SPLIT_NO_EMPTY);

$text = str_replace('&amp;', '&', htmlspecialchars($text, ENT_QUOTES));
$orig = $text;
foreach ($q as $idx => $val) {
$color = $colors[$idx % 4];
$val = str_replace('&amp;', '&', htmlspecialchars($val, ENT_QUOTES));
$pattern = '/(' . preg_quote($val, '/') . ')/i';
$text = preg_replace($pattern, '<span style="background-color:' . $color . '">$1</span>', $text);
}
$hilighted = ($orig != $text);
}
if (!$hilighted) {
return str_replace('&amp;', '&', htmlspecialchars(mb_strimwidth($text, 0, $span * 2, '…'), ENT_QUOTES));
} else {
// spanとspanの間を抜く
$text = preg_replace('/(<\/span>[^<>]{' . $span . '})[^<>]+([^<>]{' . $span . '}<span)/', '$1…$2', $text);
// 頭を抜く
$text = preg_replace('/^[^<>]+([^<>]{' . $span . '}<span)/', '…$1', $text);
// 後ろを抜く
$text = preg_replace('/(<\/span>[^<>]{' . $span . '})[^<>]+$/', '$1…', $text);
return $text;
}
}

この記事に対するコメント

最近、

☆をつけてるだけでコメントつけてなかった…ので、
コメントをつけます(笑)。

いろんな人に「PHPは簡単だよ。やってみな。」
…って言われるんだけど、どうも手が出ないまま数年。

その一方で、MovableTypeに手を出しはじめました。
blogじゃなくて。mt4からは
「更新の簡単な一般サイト」を作れるようになったので、
挑んでみようかと思って。

☆更新を客にやってもらう場合、そこが重要☆

【2008/05/25 20:03】URL | おおくぼ #-[ 編集]

MT

MovableTypeでBlogじゃない一般サイトを作れるといろいろいいことありそうだよね。僕もMT使えたらなーと時々思うんだけど、自分でデザインができないのが結構大きな制約だったりします。むしろデザインの勉強をするべきかも。(今からカヨ)

【2008/05/26 10:18】URL | tockri #TEgrP9ck[ 編集]

ダイジョブ。

ほとんどできあがってるようなテンプレートが出回ってるから(笑)。
(有名なとこでは)有名な「小粋空間」の人が書いた
「CMSとして使うMovableTypeガイドブック」
には即時使用可能なテンプレートが満載されてます。

☆ヲレは宣伝マンか(爆)☆

【2008/05/27 11:29】URL | おおくぼ #-[ 編集]

買っちゃうか。MT本。一冊持っててもいいかもなあ。

【2008/05/28 01:18】URL | tockri #-[ 編集]

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

【2012/04/12 11:44】 | #[ 編集]

この記事に対するコメントの投稿



管理者にだけ表示を許可する

この記事に対するトラックバック

トラックバックURL
http://tockri.blog78.fc2.com/tb.php/146-ac61b826
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。