テキストの文を取得し、特定の単語を太字にする単純な PHP コードがあります。
まず、必要な単語とテキスト内での位置を含む配列を取得します。
$all_words = str_word_count($text, 2, 'åæéø');
// $words is an array with the words that I want find.
$words_found = array();
foreach ($all_words as $pos => $word_found) {
foreach ($words as $word) {
if ($word == strtolower($word_found)) {
$words_found[$pos] = $word_found;
break;
}
}
}
次に、単語ごとに$words_found
、その単語が中央にあるテキストの一部を取得します。
$length = 90;
foreach ($words_found as $offset => $word) {
$word_length = strlen($word);
$start = $offset - $length;
$last_start = $start + $length + $word_length;
$first_part = substr($text, $start, $length);
$last_part = substr($text, $last_start, $length);
$sentence = $first_part . '<b>' . $word . '</b>' . $last_part;
}
UTF-8
テキストがデンマーク文字 (åæéø)のテキストであることを除いて、問題なく動作します。したがって、$first_part
または$last_part
がユニコード文字で始まる場合、susbtr 文字列は空になります。
私はmb_substr
機能を知っているので、コードをそれに置き換えます。
$word_length = mb_strlen($word, 'UTF-8');
$first_part = mb_substr($text, $start, $length, 'UTF-8');
$last_part = mb_substr($text, $last_start, $length, 'UTF-8');
しかし、この関数 ( mb_substr
) では、単語 ( $offset
) の位置が間違っているため、新しい部分文字列 ( $sentence
) が一致する必要があります。
のようなものは存在しますmb_str_word_count
か?単語の正しい位置を取得するにはどうすればよいですか?