Я использую специальные символы, такие как ä ä ö на моем веб-сайте, который измеряет длину различных текстов. Дело в том, что я заметил, что PHP считает символы «å» «ä» «ö» как 1 слово каждый. Таким образом, число считается как 3 слова, а число как 15 слов. Ну, это явно не правильно, и я нигде не могу найти ответ на эту проблему. Буду благодарен за полезный ответ, спасибо!
Если вам нужно принять во внимание ограниченный набор символов слов, просто укажите их в 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()
документы).
Вы можете попробовать добавить
setlocale(LC_ALL, 'en_US.utf8')
до вашего звонка на str_word_count
или свернуть по своему усмотрению с
substr_count(trim($str), ' ');
эта работа для меня … надеюсь, что это полезно.
ИСПОЛЬЗУЯ 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 слов