Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/163: Рейтинг темы: голосов - 163, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 22.11.2011
Сообщений: 26
1

file_get_contents() и кодировка

24.11.2012, 21:33. Показов 30401. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени дня.

Моя проблема в следующем.

PHP
1
2
3
$page = file_get_contents ( 'url' );
$count_words = preg_match_all ( '/london/i', $page, $matches );
echo $count_words;
Я получаю страницу и ищу в ней какое-то слово. Далее просто вывод на экран количество совпадений.

Все норм, если я ищу слова на латинице. Если же искать русские слова - количество совпадений 0.
PHP
1
2
3
4
5
//...
 
$count_words = preg_match_all ( '/лондон/i', $page, $matches );
 
//...
Вывел полученную страницу

PHP
1
echo $page;
На экране крякозябры,поэтому поиск не осуществляется. Как исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2012, 21:33
Ответы с готовыми решениями:

Кодировка file_get_contents()
Пользователь через сайт загружает файл на сервер. Его нужно обработать, например, найти заданную...

File_get_contents
Доброго времени суток! Возникла проблема - не выводятся отзывы с digiseller. Дело в том, что когда...

file_get_contents
Функция file_get_contents не хочет работать с доменами рф, как быть? Добавлено через 5 минут...

file_get_contents
Пишу file_get_contents(path) У себя на компе всё нормально работает, выводит код запрашиваемой...

12
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
24.11.2012, 21:46 2
altemka, посмотрите в какой кодировке файл с вашим скриптом, затем посмотрите в какой кодировке идут данные с сайта, информацию с которого вы получаете и используйте iconv() для конвертирования кодировки данных в переменной $page в вашу кодировку. И ещё: если ваша кодировка UTF-8 - в регулярном выращении добавьте модификатор "u".
0
0 / 0 / 0
Регистрация: 22.11.2011
Сообщений: 26
24.11.2012, 22:39  [ТС] 3
Блин,что то не помогает.

Вверх еще добавил
PHP
1
@header ("Content-Type: text/html; charset=UTF-8");
И там, где сказали
PHP
1
$count_words = preg_match_all ( '/лондон/U', $page, $matches );
iconv() и до этого пробовал, но вроде везде одинаковая кодировка

Кстати, url - гугловский поисковой запрос

http://www.google.ru/search?q=

Но вроде,там utf-8

Где я ошибся, может быть?
0
12 / 12 / 8
Регистрация: 20.05.2012
Сообщений: 120
25.11.2012, 01:42 4
altemka, в дополнение могу сказать следующее. Создай файл .htaccess и пропиши в нём:
Код
AddDefaultCharset UTF-8
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
25.11.2012, 08:14 5
altemka, вы написали в регулярке "U" вместо "u". Это разные модификаторы. Нужно написать маленькую "u" (в нижнем регистре).
0
0 / 0 / 0
Регистрация: 22.11.2011
Сообщений: 26
25.11.2012, 15:45  [ТС] 6
Изменил на u. Добавил файл. В гугле опять крякозябры. Зато, если поменять на аналогичный запрос яндекса, то все норм.
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
25.11.2012, 16:42 7
altemka, я посмотрел, вам нужно преобразовать из кодировки windows-1251 в кодировку UTF-8 при выводе страницы гугла.
Т.е.:
PHP
1
2
3
4
5
<?
    $page = file_get_contents ( 'тут запрос к Гуглу' );
    
    echo iconv('windows-1251', 'utf-8', $page);
?>
2
0 / 0 / 0
Регистрация: 22.11.2011
Сообщений: 26
25.11.2012, 17:00  [ТС] 8
well done!

Огромное спасибо!

Добавлено через 7 минут
Правда вот теперь категорически отказывается искать любые слова
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
25.11.2012, 17:14 9
У меня нормально, 29 выводит :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
    # Получаем HTML-код с гугла по запросу "тест"
    $page = file_get_contents ( 'http://www.google.ru/search?q=' . urlencode( 'тест' ) );
    
    # Конвертируем кодировку
    $page = iconv('windows-1251', 'utf-8', $page);
    
    # Ищем слово "тест"
    $count_words = preg_match_all ( '/тест/u', $page, $matches );
    
    # Выводим количество
    echo $count_words;
?>
Кодировка файла со скриптом в UTF-8.

Добавлено через 3 минуты
Кстати, тут не обязательно использовать preg_match. Можно использовать substr_count(), для UTF-8 - mb_substr_count().
1
0 / 0 / 0
Регистрация: 22.11.2011
Сообщений: 26
26.11.2012, 14:04  [ТС] 10
Замечательно Теперь элементарное.

Как в качестве аргумента в urlencode() использовать переменную?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
26.11.2012, 14:10 11
PHP
1
urlencode($varName);
1
0 / 0 / 0
Регистрация: 22.11.2011
Сообщений: 26
26.11.2012, 14:15  [ТС] 12
Да, это очевидно. Просто кидало на главную гугла. Сейчас вроде бы норм
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
26.11.2012, 14:37 13
Просто до вызова этой функции создаёте переменную с текстом для запроса и в аргументе функции указываете эту переменную:
PHP
1
2
3
4
5
# Инициализируем переменную
$request = 'текст для запроса';
 
# Вызываем urlencode()
urlencode( $request );
Добавлено через 56 секунд

Не по теме:

Ой, вторую страницу не заметил :D. По ходу вы разобрались уже.

0
26.11.2012, 14:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2012, 14:37
Помогаю со студенческими работами здесь

file_get_contents
Доброго времени суток, уважаемые форумчане! Мое знакомство с php началось совсем недавно, но к...

File_get_contents
Через file_get_contents получаю код другой страницы для создания нужной мне формы отправки заявок...

file_get_contents
Здравствуйте. Изучаю php. Решить надо следующую задачу. Для примера взял сайт http://kino.nsk.ru/...

file_get_contents
Я с помощью file_get_contents подгружаю сайт но мне нужно сделать так чтобы URL (сначало был мой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru