web関連
【PHP】特定の文字周辺のテキストを取得する方法
指定した文字列周辺の文字を切り出すときに使った「mb_substr()」「mb_strcut()」「mb_strpos()」の使い方がわかりづらかったので備忘録
使い方
字面似てて何がどう違うのかわかりづらいのでとりあえずまとめた
$str = "こんにちは";
// mb_substr(対象の文字列, 開始位置, 長さ, 文字コード)
echo mb_substr($str,0,3,"UTF-8");// こんに
// mb_strcut(対象の文字列, 開始位置, バイト数, 文字コード)
echo mb_strcut($str,0,3,"UTF-8");// こ
// mb_strpos(対象の文字列, 検索する文字列, 開始位置, 文字コード)
echo mb_strpos($str,"ちは",0,"UTF-8");// 3
mb_substr()
とmb_strcut()
は同じ「文字列から一部抜粋」する関数なのにmb_strcut()
が文字数で切り出しじゃなくてバイト数で切り出すからややこしい
Memo:utf-8だと1文字か1~3バイト計算だけど、Shift-JISだと1~2バイト計算みたい
対象の文字列の前後を切り出す方法
mb_substr()
とmb_strpos()
を使って指定した文字列前後10文字切り抜くコード
$str = '親譲りの無鉄砲で小供の時から損ばかりしている。小学校に居る時分学校の二階から飛び降りて一週間ほど腰を抜かした事がある。なぜそんな無闇をしたと聞く人があるかも知れぬ。別段深い理由でもない。新築の二階から首を出していたら、同級生の一人が冗談に、いくら威張っても、そこから飛び降りる事は出来まい。弱虫やーい。と囃したからである。小使に負ぶさって帰って来た時、おやじが大きな眼をして二階ぐらいから飛び降りて腰を抜かす奴があるかと云ったから、この次は抜かさずに飛んで見せますと答えた。(青空文庫より)';
$str_pos = mb_strpos($str,"新築",0,"UTF-8");// 93
$str_pos = $str_pos - 10;// 対象の前後10文字抜粋したいので-10
echo mb_substr($str, $str_pos, 20,'UTF-8');
// 結果:段深い理由でもない。新築の二階から首を出
対象文字列内から指定した文字列の位置をmb_strpos()
で取得して、mb_substr()
を使って周辺の文字を切り出し
指定した文字列が一番最初にあったときの処理とか書いてないけど、とりあえずこれで切り出せる
検索結果ページで検索したワードにヒットした記事内の検索ワード前後の数百文字を切り取るために調べた