Доброго времени! У меня такой вопрос — есть у меня файл txt с рандомным текстом — я загружаю его на сервер и с помощью функции file_get_contents() вытаскиваю в переменную содержимое этого файла, далее к примеру я захочу вывести содержимое на экран или занести с БД без разницы, — если у меня сайт (БД) работает с кодировкой utf-8 и в документе utf-8 то все проходит корректно, если скажем txt был создан как водится в WINDOWS-1251 то естественно текст получается кракозябрами, есть ли способ изменить кодировку символов в переменной php?
задан 4 мая 2016 в 12:10
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
Алексей УколовАлексей Уколов
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
1
altemka 0 / 0 / 0 Регистрация: 22.11.2011 Сообщений: 26 |
||||||||||||
1 |
||||||||||||
24.11.2012, 21:33. Показов 29998. Ответов 12 Метки нет (Все метки)
Доброго времени дня. Моя проблема в следующем.
Я получаю страницу и ищу в ней какое-то слово. Далее просто вывод на экран количество совпадений. Все норм, если я ищу слова на латинице. Если же искать русские слова — количество совпадений 0.
Вывел полученную страницу
На экране крякозябры,поэтому поиск не осуществляется. Как исправить?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
24.11.2012, 21:33 |
Ответы с готовыми решениями: Кодировка file_get_contents() File_get_contents file_get_contents Добавлено через 5 минут… file_get_contents 12 |
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 |
|||||||
Блин,что то не помогает. Вверх еще добавил
И там, где сказали
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 |
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 5752 / 4133 / 1506 Регистрация: 06.01.2011 Сообщений: 11,279 |
||||
25.11.2012, 16:42 |
7 |
|||
altemka, я посмотрел, вам нужно преобразовать из кодировки windows-1251 в кодировку UTF-8 при выводе страницы гугла.
2 |
0 / 0 / 0 Регистрация: 22.11.2011 Сообщений: 26 |
|
25.11.2012, 17:00 [ТС] |
8 |
well done! Огромное спасибо! Добавлено через 7 минут
0 |
Para bellum 5752 / 4133 / 1506 Регистрация: 06.01.2011 Сообщений: 11,279 |
||||
25.11.2012, 17:14 |
9 |
|||
У меня нормально, 29 выводит :
Кодировка файла со скриптом в UTF-8. Добавлено через 3 минуты
1 |
0 / 0 / 0 Регистрация: 22.11.2011 Сообщений: 26 |
|
26.11.2012, 14:04 [ТС] |
10 |
Замечательно Теперь элементарное. Как в качестве аргумента в urlencode() использовать переменную?
0 |
KOPOJI Почетный модератор 16843 / 6722 / 880 Регистрация: 12.06.2012 Сообщений: 19,967 |
||||
26.11.2012, 14:10 |
11 |
|||
1 |
0 / 0 / 0 Регистрация: 22.11.2011 Сообщений: 26 |
|
26.11.2012, 14:15 [ТС] |
12 |
Да, это очевидно. Просто кидало на главную гугла. Сейчас вроде бы норм
0 |
Para bellum 5752 / 4133 / 1506 Регистрация: 06.01.2011 Сообщений: 11,279 |
||||
26.11.2012, 14:37 |
13 |
|||
Просто до вызова этой функции создаёте переменную с текстом для запроса и в аргументе функции указываете эту переменную:
Добавлено через 56 секунд Не по теме: Ой, вторую страницу не заметил :D. По ходу вы разобрались уже.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
26.11.2012, 14:37 |
Помогаю со студенческими работами здесь file_get_contents File_get_contents file_get_contents file_get_contents Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 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 (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и…
Описание значений глобального массива $_SERVER с примерами.
Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и…
В статье представлены различные PHP-расширения для чтения файлов XLS, XLSX, описаны их плюсы и минусы, а также примеры…
Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.