Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Регулярное выражение не находит русские слова


Автор: AmraKimmerian 2.11.2009, 19:41
С помощью fgets получаю html-код страницы сайта. Если его рендерить в браузере или просматривать с помощью браузера исходный html-код, то все русские слова прекрасно отображаются.
Но регулярное выражение не находит эти русские слова в этом html-коде, сохраненном в переменной. С латинскими словами, цифрами и другими символами все в порядке - находит.

В чем может быть проблема? В кодировке текста?
Подскажите, пожалуйста.

Автор: bars80080 2.11.2009, 20:00
наверное, если вы приведёте код регулярки, помочь будет проще

Автор: AmraKimmerian 2.11.2009, 20:11
Код

  $t='/Регион/i';
   preg_match_all($t, $f2, $region);
   print_r($region);

где $f2 - html-код, полученный ос страницы сайта.

Автор: bars80080 2.11.2009, 20:17
в какой кодировке распарсиваемая страница?
в какой кодировке скрипт?

Автор: AmraKimmerian 2.11.2009, 20:41
Ээээ, хммм..
исходный html-код в браузере показан в UTF-8. А мой php похоже ANSI.
Как же их уровнять? с помощью setLocale? Хм... а что там нада написать?

Автор: bars80080 2.11.2009, 22:57
есть iconv()
конвертнуть либо в одну, либо в другую сторону. конечно проще конвертнуть в ютф-8 слово "регионы". но если будете сохранять полученные данные у себя в базе, то всё равно придётся их приводить к общему на сайте виду

Автор: AmraKimmerian 4.11.2009, 14:21
"...либо в одну, либо в другую сторону."
Честно говоря, не понял, что куда нужно конвертировать и разве возможно конвертировать в X то что уже в X?

Как точно узнать, из какой кодировки в какую нужно конвертировать?
Может ли тут помочь setLocale? Почему не использовать его?

Код

$a=iconv("ANSI","UTF-8","Регион");
echo $a;


Эхо ничего не выводит.

Автор: bars80080 4.11.2009, 14:37
ну, всё достигается опытным путём

я имел ввиду, что либо слово "регионы" преобразовать в ютф8, что проще, так как это одно слово
но это подстройка под чужой сайт. если же вы собираетесь полученные данные сохранять у себя, то всё равно придётся конвертировать в свою кодировку

может:
Код

$a=iconv("cp1251","UTF-8","Регион");
echo $a;

?

Автор: AmraKimmerian 4.11.2009, 15:47
"ну, всё достигается опытным путём"
Да, действительно!

Код

$a=iconv("CP1251","UTF-8","Регион");
$t='/'.$a.'/i';
preg_match_all($t, $f2, $region);
print (iconv("UTF-8","CP1251", $region[0][0]));


Так все заработало: и находит и возвращает в читаемом виде.

bars80080, спасибо!

Автор: Pitlord 5.11.2009, 23:29
Цитата(AmraKimmerian @  4.11.2009,  15:47 Найти цитируемый пост)
"ну, всё достигается опытным путём"
Да, действительно!

Надо просто в мануал смотреть: http://php.net/iconv

Во-первых, в данном случае Вам надо просто исходный PHP-файл сохранять в UTF-8, во-вторых, необходимо добавить модификатор "u" в выражение, т.к. Вы работаете с UTF-8.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)