Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: функция str_word_count
 
 автор: Слипа   (01.03.2007 в 01:30)   письмо автору
 
 

Помогите, пожалуйста, понять - почему не работает функция str_word_count при подсчете слов в русских строках.
(стоит Apache 2.2.3+PHP 5.1.6)


<?php

    $rus 
"Свинство редкостное";
    echo 
"Количество слов в русской строке = ".str_word_count($rus)."<br>";
    
$eng "The rain in Spain";
    echo 
"Количество слов в англ. строке = ".str_word_count($eng);

?>


В результате выдает:

Количество слов в русской строке = 5
Количество слов в англ. строке = 4

   
 
 автор: Саня   (01.03.2007 в 13:25)   письмо автору
 
   для: Слипа   (01.03.2007 в 01:30)
 

Видимо функция str_word_count() не знает о существовании русского алфавита... но это поправимо:
<?php
for ( $i 192$list "Ёё"$i 256$list .= chr($i), $i++ );

$rus "Свинство редкостное";
echo 
"Количество слов в русской строке = ".str_word_count($rus0$list)."<br>";

   
 
 автор: Слипа   (01.03.2007 в 20:54)   письмо автору
 
   для: Саня   (01.03.2007 в 13:25)
 

Большое спасибо. Действительно, так работает.
Правда, мне как новичку еще сложно понять строчку


for ( $i = 192, $list = "Ёё"; $i < 256; $list .= chr($i), $i++ ); 


но я попытаюсь разобраться.
Еще раз огромное спасибо.

   
 
 автор: Саня   (01.03.2007 в 20:58)   письмо автору
 
   для: Слипа   (01.03.2007 в 20:54)
 

Мне просто впадлу было вручную перечислять все буквы русского алфавита, поэтому я воспользовался тем, что в таблице ASCII все русские буквы (кроме "Ё" и "ё") имеют коды с 192 по 256. Поэтому простым циклом можно сделать это перечисление. Можно переписать так:
<?
$list 
"Ёё";
for ( 
$i 192$i 256$i++ ) {
  
$list $list chr($i);
}

   
 
 автор: Слипа   (01.03.2007 в 21:03)   письмо автору
 
   для: Саня   (01.03.2007 в 20:58)
 

Теперь понятно!

А можно тогда еще вопрос: почему эта функция сама не понимает русский, если у меня текущая локаль русская (windows-1251)?

   
 
 автор: Саня   (01.03.2007 в 21:31)   письмо автору
 
   для: Слипа   (01.03.2007 в 21:03)
 

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

   
 
 автор: Слипа   (01.03.2007 в 21:44)   письмо автору
 
   для: Саня   (01.03.2007 в 21:31)
 

То есть эта функция не понимает русский у всех? Я думала, это только у меня такое происходит.
Потому что нигде про это не написано.
Мне говорили только, что надо с локалью разобраться, поскольку из-за нее str_word_count лажает.

   
 
 автор: Саня   (01.03.2007 в 21:51)   письмо автору
 
   для: Слипа   (01.03.2007 в 21:44)
 

Не все проблемы решаются настройкой одной только локали. В частности локаль не решила проблему str_word_count().

   
 
 автор: Слипа   (01.03.2007 в 21:54)   письмо автору
 
   для: Саня   (01.03.2007 в 21:51)
 

Ок, еще раз спасибо большое за решение проблемы :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования