html — PHP: str_word_count () возвращает целое значение 12

Я использую специальные символы, такие как ä ä ö на моем веб-сайте, который измеряет длину различных текстов. Дело в том, что я заметил, что PHP считает символы «å» «ä» «ö» как 1 слово каждый. Таким образом, число считается как 3 слова, а число как 15 слов. Ну, это явно не правильно, и я нигде не могу найти ответ на эту проблему. Буду благодарен за полезный ответ, спасибо!

0

Решение

Если вам нужно принять во внимание ограниченный набор символов слов, просто укажите их в str_word_count с его третьим параметром (charlist):

$charlist = 'åäö';
echo str_word_count('åäöåäöåäöåäöåäö', 0, $charlist); // 1

Кроме того, вы можете написать свой собственный Unicode-готов str_word_count функция. Одним из возможных подходов является разбиение исходной строки несимвольными символами с последующим подсчетом полученного массива:

function mb_str_word_count($str) {
return preg_match_all('#[\p{L}\p{N}][\p{L}\p{N}\'-]*#u', $str);
}

По сути, эта функция подсчитывает все подстроки в целевой строке, которые начинаются либо с буквы, либо с символа цифры, за которым следует любое число (включая ноль) букв, цифр, дефисов и одинарных кавычек (в соответствии с описанием, приведенным в str_word_count() документы).

1

Другие решения

Вы можете попробовать добавить

setlocale(LC_ALL, 'en_US.utf8')

до вашего звонка на str_word_count
или свернуть по своему усмотрению с

substr_count(trim($str), ' ');
0

эта работа для меня … надеюсь, что это полезно.

ИСПОЛЬЗУЯ str_word_count, вам нужно использовать utf8_decode (utf8_encode) ..

function cortar($str)
{
if (20>$count=str_word_count($str)) {
return $str;
}
else
{
$array = str_word_count($str,1,'.,-0123456789()+=?¿!"<>*ñÑáéíóúÁÉÍÓÚ@|/%$#¡');
$s='';
$c=0;
foreach ($array as $e) {
if (20>$c) {
if (19>$c) {
$s.=$e.' ';
}
else
{
$s.=$e;
}
}
$c+=1;
}
return utf8_decode(utf8_encode($s));
}
}

функция повторяет 20 слов

0
По вопросам рекламы [email protected]