Как сделать кодировку в php

Обновлено: 04.07.2024

Как установить текстовый файл ENCODING (например, UTF-8) в PHP?

Позвольте мне показать вам свою проблему. Это мой код:

fwrite() имеет аналогичный вывод.

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

Теперь это мой вопрос: как установить кодировку текстового файла с помощью PHP?

PHP не применяет кодировку при хранении текста в файле: он хранит данные точно так же, как и в строке.

Вы отмечаете, что у вас есть проблемы с открытием файла в файле notepad.exe . Этот текстовый редактор не очень хорошо угадывает кодировку файла, который вы открываете; если текст закодирован в UTF-8, вы должны выбрать его как UTF-8. Используйте другой текстовый редактор, если это возможно. Notepad ++ – популярная замена.

Если вы должны использовать notepad.exe , в крайнем случае, напишите знак байта в файл, прежде чем писать что-нибудь еще; это заставит его распознавать файл как UTF-8, в то же время потенциально делая файл непригодным для других целей (подробности см. в статье Википедии).

Вы можете попробовать это, используя mb_convert_encoding

Также проверьте значок .

Обновление: (попробуйте это и найдите правильную кодировку для своего текста)

Также попробуйте это на GitHub .

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

Я хочу unicode везде, кроме гостевой книги. Что и в каком точно месте надо прилепить на страницы и как и каком файле и каталоге написать сам php скрипт?

Как задать кодировку
Здравствуйте! Скажите пожалуйста, как в файле leftpanel.inc задать кодироку utf-8? На серваке.

Как задать кодировку для файла?
<?php header('Content-Type: text/html; charset= utf-8'); ini_set('display_errors','On');.

Задать кодировку MySQL
Доброго времени суток ! Подскажите пожалуйста (кто знает) как задать кодировку при добавлении.

Задать кодировку Mysql
Добрый вечер, подскажите пожалуйста, в чём может быть ошибка ? (задал кодировку 1251 и перестало.

Просто сам скрипт пиши в юникодовской кодировке (например, utf-8 ). Но надо учитывать, что буква уже может состоять из нескольких байт. Поэтому вместо таких функций как strlen(), substr() и т.п. нужно использовать mb_strlen(), mb_substr() и т.д.

А сама страница должна быть на php? А как тогда делать текст? Можно ли туда же запихать java-скрипты? Как?

FireFox этого не понял и отобразил полное ёклмн, считаю страницу закодированной в ANSI-1251. Причём, там было даже так:

В начале страницы напишите

Потом скачайте notepad ++ , с помощью него откройте вашу страницу и в разделе кодировка перекодируйте на utf-8 (без bom). Должно всё заработать.

Потом скачайте notepad ++ , с помощью него откройте вашу страницу и в разделе кодировка перекодируйте на utf-8 (без bom).


А на гостевой скорее всего надо windows-1251

впиши в начале гостевой книге

в notepad ++ поставте кодировку windows-1251 и всё.

Должно всё заработать.

многие гостевые книги поддерживают кодировку только windows-1251, а если страница сделана в блокноте, стандартная кодировка идёт utf-8, при перекодировании в windows-1251 за место русских символов появляется всякая абраказябра, чтобы не переписывать весь русскоязычный текст можно и не переделывать страницу.
Но это в том случае, если сайт уже создан на utf-8, в принципе можно сразу всё создавать на windows-1251.

команда "Размер файла" отображается НЕ корректно в случае использования вот этой команды : "header("Content-Type: text/html; charset=cp1251");"
но нормально отображается содержимое файла, но при применении "header('Content-Type: text/html; charset=utf-8');" происходит наоборот содержимое кракозяброво, а системная инф нормально.
ВОПРОС: мне надо как-то сделать чтобы для вывода системной информации использовалась команда "header("Content-Type: text/html; charset=cp1251");", а для содержимого файла "header('Content-Type: text/html; charset=utf-8');"? или по УМУ так НЕ делается?

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

Ситуация такая: Начал создавать страницы для сайта. По умолчанию стояла кодировка Windows-1251 , а базу данных в utf-8 . Затем страницы перекодировал в UTF-8 без BOM . На данный момент настройки базы такие:

А в итоге: информация из базы выводиться корректно, а вот то, что было написано на самих страницах видно только тогда, когда кодировку в обозревателе выставишь UTF-8 , соответственно то, что выводилось из базы будет на кракозябрах. Подскажите, как решить?

Дайте пожалуйста ссылку, вы или так перекодировали или я что-то не так понял.
Если html страница будет в utf-8 и вы поставите в meta charset cp1251 то нормально страница не будет отображаться никак, вы уверены в том что ваши страницы в UTF-8?

Суть в том, что все страницы (.php) пересохранены в UTF-8 по средствам Akel Pad, и charset в них я тоже поменял везде c Windows-1251 на UTF-8 вручную! Всё, что приходит с сервера отлично отображается а вот сами страницы хоть и все перекодированы в UTF-8, показывают кракозябры! Ссылку дать не могу пока тестирую на Денвере!

сразу после соединения с БД

mysql выдаёт данные в кодировке windows-1251 а страницы у меня в utf-8? вот и получается. То, что браузер автоматом ставит кодировку windows-1251, а то что прописано на страницах в utf-8 выводит на кракозябрах.

как он может выдавать в win если у вас >MySQL connection collation: utf8_general_ci исправил ответ, и то и то попробуйте вставить..

В итоге помогло только mysql_query('SET NAMES utf8');

Что-то мне кажется, что html-файлы, которые выводят инфу и базы, имеют кодировку Windows-1251 . В мета может стоять

, но сами символы на кодировке Windows-1251 . Для проверки, попробуйте открыть, например, в AkelPad проблемную страницу в кодировке UTF-8 . Если русский текст будет не нормальным, тогда пересохраните в кодировке UTF-8 .

Вполне возможно, суть в том что проблема явно не на сервере а на клиенте, в данном случае тем или иным образом связана именно с кодировкой html'я, но никак не с Mysql'ем.

Открыл один из файлов в Akel Pad? кодировку пишет 65001 (UTF-8) *BOM, оно и понятно я лично перекодировал страницы! Проблема та же!

Добавьте эти строки в .htaccess

Вы в рутовую папку кинули и не пашет? Это на локале или на глобале?

В общем, если это на денвере, то, что я написал изначально, обычно решает все проблемы. Так что х3. валите в пхп.ини и там кодировку дефолтную меняйте.

"Когда кодировку в обозревателе выставишь Windows-1251" чел, если в вин1251 норм читает, значит, инфа реально записана в вин1251. скорей всего проблема с тем, что инфа у вас в базе в вин1251, хоть вы и чарсет там проставили утфный. вы как инфу в базу вносили?

Сделайте дамп базы без сжатия и поменяйте кодировку блокнотом. Мне вроде когда-то такое прокатило. ) Ну попробуйте по крайней мере.

Откройте в блокноте, гляньте какая кодировка у дампа. Поменяйте на утф, если там вин1251.

Мои сайты сделаны в кодировке windows-1251, включая БД. Возникла необходимость получить файл в кодировке UTF-8 (собираю dump-файл базы). Как оказалось, преобразование из одной кодировки в другую - задача не тривиальная. В этой статье я попытаюсь разложить по полочкам, что к чему. Поле деятельности: Apache/2.2.15 (Win32) PHP/5.3.5. Во внимание беру только две кодировки, UTF-8 и Windows-1251 (aka cp1251), но многое из сказаного относится к преобразованиям в любых кодовых страницах.


Прежде чем хвататься за клаву и "превращать воду в вино"..

часть Рекомендательная

Приведу несколько примеров получающихся заголовков.
Настройки PHP: windows-1251 (php.ini: default_charset=windows-1251)

Настройки Apache: UTF-8 (.htaccess: addDefaultcharset UTF-8)

Настройки PHP и Apache: не указана кодировка

часть Функциональная (PHP)

Переключить кодировку PHP-препроцессора на время выполнения скрипта можно так:

С другой стороны, перед передачей ответа можно явно указать заголовок с кодировкой:

header ('Content-Type: text/html; charset=windows-1251');

Кодировка файла скрипта. PHP-файл - это обычный текстовик, все символы в нем кодируются набором байт с учетом установленной кодировки текста. Если в скрипте используются функции типа echo(), fwrite() и т.п., причем текст их параметров записан в этом же скрипте, то здесь так же важна кодировка самого файла скрипта! Пример файла some.php:

БД, внешние файлы. Если кодировка текста, полученного из таблицы/файла/сайта, отличается от нужной, то придется перекодировать. В этом месте наконец-то можно использовать функции типа iconv(), utf8_encode(), ob_iconv_handler(), mb_output_handler() и т.п., а так же пользовательские функции перекодирования.

Назначение всех этих функций разное. Например, utf8_encode() поддерживает только следующее преобразование: ISO-8859-1 (aka Latin-1) > UTF-8. Две других функции, ob_iconv_handler() и mb_ output_handler(), можно использовать только как callback-функции для буфферизированного вывода (этот момент до меня долго доходил). Пример использования: здесь источником текста является сам скрипт (кодировка файла: UTF-8), настройки web-сервера и PHP не суть важны, в браузере можно переключиться.

Результатом в браузере будут две строки, первая будет читаться при выборе кодировки страницы "UTF-8" (см. в настройках браузера), вторая - "Кириллица (Windows-1251)". Это был учебный пример, реальное применение перекодирования "на лету": нужно вернуть пользователю html-страницу в другой кодировке.

Создание файла с нужной кодировкой. Тут вроде особых проблем нет, используем iconv() или сразу пишем в нужной кодировке. Зато есть ньюанс с UTF-8 файлами. Следующий код создает файл с кодировкой UTF-8 (файл скрипта в той же кодировке):

Некоторые программы не корректно определяют кодировку полученного файла. Выход: дописывать сигнатуру UTF-8 в начале файла. Для этого нужно раскоментировать строку (3). Что такое "сигнатура UTF-8", цитата из Википедии: "Порядок байтов (BOM, сигнатура) Многие программы Windows (включая Блокнот) добавляют байты 0xEF, 0xBB, 0xBF в начале любого документа, сохраняемого как UTF-8. Это метка порядка байтов Юникода (англ. Byte Order Mark, BOM), также её часто называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature). По наличию сигнатуры программы могут автоматически определить, является ли файл закодированным в UTF-8, однако файлы с такой сигнатурой могут некорректно обрабатываться старыми программами, в частности xml-анализаторами. Такие редакторы, как Notepad++, Notepad2 и Kate позволяют явно указывать, следует ли добавлять сигнатуру при сохранении UTF-файлов."

Post Scriptum

Нашел на форумах пользовательскую функцию преобразования windows-1251 UTF-8. Может пригодится когда-нибудь. У меня она работала криво в направлении Win -> UTF. Пофиксил, все работает:)

Баг был в строке (20): функция str_replace() гонит на половине алфавита. Заменяет русскую win-букву на двухбайтное UTF-значение, а потом а этой замене опять заменяет первый байт(!), который в win-1251 так же соответствует букве, на UTF-значение. Причем другая половина алфавита нормально заменяется.

Читайте также: