PHPで特定の文字列を検索し、一致した文字から「○文字表示する」というのを作っています。


$text = "本日は晴天なり本日は晴天なり"; //検索対象
$keyword = "本日"; //検索語句

$array = explode("$keyword",$text);
//一致すればそこから全角100文字表示
if(!empty($array[1])){
$hit_text = $keyword.$array[1];
echo substr($hit_text,0,200)."...";
}

しかし、$text内に同じ検索語句がある場合、途中で配列に代入されてしまい、文字数が短くなります。
より柔軟性のあるコードの書き方、アドバイスをいただければと思います。

回答の条件
  • 1人2回まで
  • 登録:2008/04/01 02:22:38
  • 終了:2008/04/01 03:36:42

回答(1件)

id:kent013 No.1

kent013回答回数38ベストアンサー獲得回数72008/04/01 02:59:25

ポイント100pt

strposを使えばいいと思います.

mbstringを使えば,全角文字をきちんと取り扱ってくれます.

<?php
ini_set("mbstring.internal_encoding", "sjis");
$text = "本日は晴天なり本日は晴天なりうがほげほげほげほげほげもげもげもげもげ"; //検索対象
$keyword = "うが"; //検索語句

$shoten = getSubStringFromKeyword($text, $keyword, 10);
var_dump($shoten);

function getSubStringFromKeyword($text, $keyword, $num){
    $pos = mb_strpos($text, $keyword);
    if($pos === false){
        return null;
    }
    return mb_substr($text, $pos, $num);
}
?>

一行目のini_setはphp.iniでmbstring.internal_encodingを設定してあれば必要ありません.

id:k27w

参考にさせていただきます。ありがとうございました。

2008/04/01 03:36:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません