File get contents windows 1251

Доброго времени! У меня такой вопрос — есть у меня файл txt с рандомным текстом — я загружаю его на сервер и с помощью функции file_get_contents() вытаскиваю в переменную содержимое этого файла, далее к примеру я захочу вывести содержимое на экран или занести с БД без разницы, — если у меня сайт (БД) работает с кодировкой utf-8 и в документе utf-8 то все проходит корректно, если скажем txt был создан как водится в WINDOWS-1251 то естественно текст получается кракозябрами, есть ли способ изменить кодировку символов в переменной php?

задан 4 мая 2016 в 12:10

dantelol's user avatar

danteloldantelol

7345 золотых знаков30 серебряных знаков56 бронзовых знаков

Это можно сделать двумя способами:

$text = mb_convert_encoding($text, 'utf-8', 'cp1251');

$text = iconv('CP1251', 'UTF-8', $text);

Документация: iconv(), mb_convert_encoding().

ответ дан 4 мая 2016 в 12:18

Алексей Уколов's user avatar

Алексей УколовАлексей Уколов

2,2421 золотой знак10 серебряных знаков20 бронзовых знаков

3

Попробуйте данную функцию:

function file_get_contents_utf8($fn)
{
    $content = file_get_contents($fn);
    return mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}

ответ дан 4 мая 2016 в 12:18

Andrei Katalkin's user avatar

1

altemka

0 / 0 / 0

Регистрация: 22.11.2011

Сообщений: 26

1

24.11.2012, 21:33. Показов 29998. Ответов 12

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Доброго времени дня.

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

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

5752 / 4133 / 1506

Регистрация: 06.01.2011

Сообщений: 11,279

24.11.2012, 21:46

2

altemka, посмотрите в какой кодировке файл с вашим скриптом, затем посмотрите в какой кодировке идут данные с сайта, информацию с которого вы получаете и используйте iconv() для конвертирования кодировки данных в переменной $page в вашу кодировку. И ещё: если ваша кодировка UTF-8 — в регулярном выращении добавьте модификатор «u«.



0



altemka

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 и пропиши в нём:



0



Эксперт PHP

5752 / 4133 / 1506

Регистрация: 06.01.2011

Сообщений: 11,279

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



Para bellum

Эксперт PHP

5752 / 4133 / 1506

Регистрация: 06.01.2011

Сообщений: 11,279

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



Para bellum

Эксперт PHP

5752 / 4133 / 1506

Регистрация: 06.01.2011

Сообщений: 11,279

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



KOPOJI

Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16843 / 6722 / 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



Para bellum

Эксперт PHP

5752 / 4133 / 1506

Регистрация: 06.01.2011

Сообщений: 11,279

26.11.2012, 14:37

13

Просто до вызова этой функции создаёте переменную с текстом для запроса и в аргументе функции указываете эту переменную:

PHP
1
2
3
4
5
# Инициализируем переменную
$request = 'текст для запроса';
 
# Вызываем urlencode()
urlencode( $request );

Добавлено через 56 секунд

Не по теме:

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



0



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

PHP – один из самых универсальных языков программирования, который используется для разработки веб-сайтов, в том числе и с использованием кириллицы. На практике встречаются ситуации, когда необходимо читать файлы с кириллицей, например, при импорте данных из файлов различных форматов. В этой статье мы рассмотрим, как правильно прочитать файл с кириллицей в PHP.

Первым шагом к правильному чтению файлов с кириллицей в PHP является определение кодировки, в которой хранятся данные в файле. Чаще всего файлы с кириллицей сохраняются в кодировке Windows-1251 или UTF-8. Определить кодировку файла можно с помощью функции mb_detect_encoding(), которая автоматически определяет кодировку файла. Например:

$file_content = file_get_contents('filename.txt');
$file_encoding = mb_detect_encoding($file_content, 'UTF-8', true);
echo $file_encoding;

Если кодировка файла не определяется автоматически, можно воспользоваться другими методами. Например, можно перебирать список возможных кодировок и проверять, в какой из них файл читается корректно:

$file_content = file_get_contents('filename.txt');
$encodings = array('UTF-8', 'Windows-1251');
foreach ($encodings as $encoding) {
    $file_content = iconv($encoding, 'UTF-8//IGNORE', $file_content);
    $test_content = iconv('UTF-8', $encoding, $file_content);
    if ($test_content === $file_content) {
        echo $encoding;
        break;
    }
}

В данном примере мы перебираем список кодировок (UTF-8 и Windows-1251), преобразуем файл в UTF-8 и обратно в исходную кодировку, а затем проверяем, совпадают ли исходный и преобразованный файлы. Если совпадают, то мы нашли кодировку файла.

После того, как мы определили кодировку файла, необходимо открыть его для чтения. Для этого можно получить содержимое файла с помощью функции file_get_contents(), либо использовать более продвинутый метод: открытие файла в режиме чтения с помощью функции fopen() и последующее чтение его построчно с помощью функции fgets():

$file_handle = fopen('filename.txt', 'r');
while (($line = fgets($file_handle)) !== false) {
    // обработка строки
}
fclose($file_handle);

В данном примере мы открываем файл ‘filename.txt’ в режиме чтения, а затем читаем его построчно в цикле while. При этом в переменную $line записывается текущая строка файла. Кроме того, необходимо не забывать закрывать файл после чтения с помощью функции fclose().

После чтения файла с кириллицей в PHP необходимо правильно обработать полученные данные. В частности, могут возникнуть проблемы с отображением кириллических символов в браузере, если они не сохранены в кодировке UTF-8. Для решения этой проблемы можно воспользоваться функцией iconv(), которая позволяет конвертировать текст из одной кодировки в другую:

$file_content = file_get_contents('filename.txt');
$file_content = iconv('Windows-1251', 'UTF-8//IGNORE', $file_content);
echo $file_content;

В данном примере мы читаем содержимое файла ‘filename.txt’ в переменную $file_content, а затем конвертируем его в кодировку UTF-8 с помощью функции iconv(). Для этого мы указываем исходную кодировку (Windows-1251) и желаемую кодировку (UTF-8).

В заключение можно отметить, что чтение файла с кириллицей в PHP – это довольно простая задача, если понимать, как с этим правильно работать. Главное – определить кодировку файла и правильно обработать полученные данные. Также можно использовать различные инструменты и библиотеки, которые позволяют упростить процесс чтения файлов с кириллицей в PHP.

Иногда требуется сменить полностью кодировку файла, например с utf-8 в windows-1251. Зачастую это делается с помощью редактора кода. Но что если это необходимо сделать программно, в этом поможет функции php — iconv().

Для того чтобы не перекодировать каждую строку файла с помощью iconv(string $input_charset, string $output_charset, string $string) — мы можем преобразовать лишь одну строку. Этой строкой будет наш файл, полностью, полученный с помощью функции file_get_contents($path)

Для примера полностью перекодируем файл из UTF-8 в WINDOWS-1251.

В итоге это будет выглядеть вот так:

$file_string = file_get_contents ("tmp/test_file.csv");
$file_string = iconv("UTF-8", "WINDOWS-1251", $file_string);
file_put_contents ("tmp/test_file.csv", $file_string);

Также, если вы хотите сменить окончания строк, например с Mac ( \r ) формата на Windows ( \r\n ) / Unix ( \n ) формат:
 

// Windows CRLF
$string = preg_replace('~(*BSR_ANYCRLF)\R~', "\r\n", $string);
// Unix CR
$string = preg_replace('~(*BSR_ANYCRLF)\R~', "\n", $string);
// Mac LF
$string = preg_replace('~(*BSR_ANYCRLF)\R~', "\r", $string);

Проблема кодировок часто возникает при написании парсеров, чтении данных из xml и CSV файлов. Ниже представлены способы эту проблему решить.

1

windows-1251 в UTF-8

$text = iconv('windows-1251//IGNORE', 'UTF-8//IGNORE', $text);
echo $text;

PHP

$text = mb_convert_encoding($text, 'UTF-8', 'windows-1251');
echo $text;

PHP

2

UTF-8 в windows-1251

$text = iconv('utf-8//IGNORE', 'windows-1251//IGNORE', $text);
echo $text;

PHP

$text = mb_convert_encoding($text, 'windows-1251', 'utf-8');
echo $text;

PHP

3

Когда ни что не помогает

$text = iconv('utf-8//IGNORE', 'cp1252//IGNORE', $text);
$text = iconv('cp1251//IGNORE', 'utf-8//IGNORE', $text);
echo $text;

PHP

Иногда доходит до бреда, но работает:

$text = iconv('utf-8//IGNORE', 'windows-1251//IGNORE', $text);
$text = iconv('windows-1251//IGNORE', 'utf-8//IGNORE', $text);
echo $text;

PHP

4

File_get_contents / CURL

Бывают случаи когда file_get_contents() или CURL возвращают иероглифы (Алмазные борÑ) – причина тут не в кодировке, а в отсутствии BOM-метки.

$text = file_get_contents('https://example.com');
$text = "\xEF\xBB\xBF" .  $text;
echo $text;

PHP

Ещё бывают случаи, когда file_get_contents() возвращает текст в виде:

�mw�Ƒ0�����&IkAI��f��j4/{�</�&�h�� ��({�񌝷o�����:/��<g���g��(�=�9�Paɭ

Это сжатый текст в GZIP, т.к. функция не отправляет правильные заголовки. Решение проблемы через CURL:

function getcontents($url){
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	$output = curl_exec($ch);
	curl_close($ch);
	return $output;
}

echo getcontents('https://example.com');

PHP

12.01.2017, обновлено 02.11.2021

Другие публикации

Отправка письма с вложением

Отправка e-mail в кодировке UTF-8 с вложенными файлами и возможные проблемы.

Работа с JSON в PHP

JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и…

Массив $_SERVER

Описание значений глобального массива $_SERVER с примерами.

Получить фото из Instagram без API

Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и…

Обзор PHP расширений для чтения файлов Excel

В статье представлены различные PHP-расширения для чтения файлов XLS, XLSX, описаны их плюсы и минусы, а также примеры…

Бот Телеграм на PHP

Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.

  • Fifa 12 вылетает при запуске windows 10
  • Fifa 10 requires hardware graphics acceleration windows 10 что делать
  • Fifa 07 skachat dlya kompyuter windows 10
  • Fictionbook editor скачать для windows 10
  • Fiction book reader скачать для windows 10