imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 24.02.2004, 17:58     # 1
NarcomBAT
Guest
 
Сообщения: n/a

проблема - Regular Expression и русская буква "ч"

имеется текстовой файл(на русском) и такой вот код
PHP код:
$file "C:\\Inetpub\\wwwroot\\members\\data\\2004\\4\\3.txt";
$fd fopen ($file"r");
    
$contents fread ($fdfilesize ($file)); 
    
fclose ($fd);
    print 
$contents."<br>";
    
/* Extract all words matching the regexp from the current line: */
    
preg_match_all("/\b[a-zA-Zа-яА-Я]+\b/",$contents,$words);
    
print_r($words)."<br>"
нужно считать файл в переменныю $content что и происходит
затем надо $contents разбить на массив где каждый элемент массива
это одно слово

ну напрмер файл 3.txt содержит одну строку
"Вечно молодой вечно пьяный"

после выполнения скрипта получаем такой вот массив $word
Array ( [0] => Array ( [0] => Вечно [1] => молодой [2] => вечно [3] => пьяный ) )

но вот что странное я заметил - если слово начиняется с буквы "ч" то она просто пропадает

ну напрмер если файл 3.txt содержит одну строку
"зачем через голову прыгать"

после выполнения скрипта получаем такой вот массив $word
Array ( [0] => Array ( [0] => зачем [1] => ерез [2] => голову [3] => прыгать ) )

т.е. слово "через" превратилось "ерез"

и так со всеми словами которые начинаются на букву "ч"

я не понимаю что происходит
в чем проблема??

Последний раз редактировалось NarcomBAT; 24.02.2004 в 18:47.
 
Старый 24.02.2004, 18:59     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Скорей всего локаль кривая. Юзай setlocale.
RaZEr вне форума  
Старый 24.02.2004, 20:50     # 3
BiГ
Guest
 
Сообщения: n/a

PHP какой версии ... обнови, в последних версиях этот глюк исправили ...
 
Старый 25.02.2004, 10:42     # 4
NarcomBAT
Guest
 
Сообщения: n/a

RaZEr
например в php-help есть пример

/* Set locale to Dutch */
setlocale (LC_ALL, 'nl_NL');

что-бы сделать set locale to Russian вместо 'nl_NL' нужно поставить 'ru_RU'
или как? можно чуть-чуть по подробней?


BiГ

версия 4.3.2

Добавлено через 6 минут:
RaZEr

проверил если ставить ru_RU ничего не меняется
 
Старый 25.02.2004, 10:42     # 5
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
ru_RU.CP1251
RaZEr вне форума  
Старый 25.02.2004, 11:14     # 6
NarcomBAT
Guest
 
Сообщения: n/a

RaZEr
поставил

setlocale (LC_ALL, 'ru');

в это примере заработалаааа
ставлю в реальный скрипт в первую строку не работает никаких изменений
этот preg_match_all находится где-то в середине скрипта
ставлю setlocale прямо перед preg_match_all - РАБОТАЕТ
это тоже странно выходит так что некоторые функции которые вроде как
не дожны менять locale меняют его
но это вроде как уже другая проблема а мой скрипт заработал

Спасибо RaZEr выручил

Добавлено через 10 минут:
RaZEr

нет неработает ru_RU.CP1251
 
Старый 25.02.2004, 11:16     # 7
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Значит не стоит. Узнай какая стоит, если не стоит никакая, нужно поставить.
RaZEr вне форума  
Старый 25.02.2004, 13:45     # 8
NarcomBAT
Guest
 
Сообщения: n/a

RaZEr

HTTP_ACCEPT_LANGUAGE - en-us. ты про это или нет
но ведь всетаки если ставишь setlocale (LC_ALL, 'ru');
в скрипте то работает

зашел в Regional and language Options поменял Regional Options на
Russian соответственно сейчас
HTTP_ACCEPT_LANGUAGE - ru

но все равно ru_RU.CP1251 не работает
и если вообще без setlocale буква "ч" все равно пропадает
хотя HTTP_ACCEPT_LANGUAGE - ru
 
Старый 26.02.2004, 02:34     # 9
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Формат locale:
Код:
lang[_country_region[.code_page]]
Примеры для nix:
Код:
setlocale(LC_ALL,"ru");
setlocale(LC_ALL,"ru_RU");
setlocale(LC_ALL,"ru_RU.CP1251");
Примеры для окон:
Код:
setlocale(LC_ALL,"rus");
setlocale(LC_ALL,"Russian");
setlocale(LC_ALL,"Russian_Russia");
setlocale(LC_ALL,"Russian_Russia.1251");
PS: Сочетания языков, регионов и кодировок для nix разные и те, что есть по умолчанию лежат в /usr/share/locale . Для окон все довольно стандартно, - список языков и регионов есть на MSDN, а кодировки в реестре посмотри если оч. интересно (но 1251 и 1252 есть точно).
RaZEr вне форума  
Старый 26.02.2004, 21:44     # 10
NarcomBAT
Guest
 
Сообщения: n/a

интерсно было, посмотрел в реестре
есть windows-1251 ну что мне с этого
я проверил у меня WindowXP,PHP 4.3.2, IIS
вот setlocale(LC_ALL,"ru") или setlocale(LC_ALL,"rus") работает

а вот на хосте RedHat, PHP 4.2.2 работает
setlocale(LC_ALL,"ru_RU")

вот так
 

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:04.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.