Кодировка php для windows

Кодировка в PHP

Кодировка PHP
Помогите пожалуйста. Недавно начал изучать PHP & MySQL и сталкнулся с одной проблемой. Вместо.

PHP кодировка
что делаю не так,, на локальном сервере(open server) работает показывает нормально, как загрузил на.

PHP кодировка
Уже как неделю ищу причину проблемы в кодировке. Данные получаются file_get_contents и.

php кодировка
Подскажите, пожалуйста, почему в окне браузера появляются иероглифы. В mysql phpMyAdmin в полях.

переведи БД на windows-1251 или файлы пхп ютф

Добавлено через 1 минуту
и причем тут БД, ты просто выводишь строку в браузер, я не вижу обращения к БД

Подскажите, а что если происходит такая вещь:

есть файл назовем его main.php, след. содержания (упрощаю для понимания).

файл inc.php собственно такой:

1. Запускаю. Получаю данные:

Внимание! Действие не выполнено
ѕС?РёР±РєР° РїСЂРё

2. Понимаю, что вся страница выводится в win1251, а строка судя по крокозябрам в UTF8

3.Смотрю кодировку — действительно. Кодировка win1251.

4.Вручную меняю кодировку отображения в браузере на UTF8, и получаю:

Т.е. только текст подключаемой страницы выводится нормально.

5. Получается что всё то что находится на основной странице (на которой есть ) перекодируется правильно, а что подключается — выводится в кодировке UTF8?

Но почему так, ведь сами файлы сохранены в ANSI я их писал в одном и том-же редакторе — notepad++!

Я ничего не пойму!

Подъитожу вопрос:
Почему в одном одни данные выводятся как UTF8, а другие в win1251, хотя
во-первых: оба файла в ANSI,
во-вторых: второй файл инклудится в «тело» первого и соответственно когда применяется , которая говорит браузеру применить для отображения windows-1251 два файла уже единое целое и исходя из того что оба в одинаковой кодировке, они должны одинаково и отображаться!!
?

Настройка локали в php под windows для работы с UTF-8?

Создаём файл index.php в кодировке UTF-8 без BOM c таким содержанием:

И запускаем скрипт под Windows.

Я получаю следующий вывод:
Число: 19, месяц: ������, день недели: �����������

Иногда слетает на такое:
Число: 19, месяц: November, день недели: Monday

Принудительное выставление локали
так же ничего не меняет.

однако если у файла кодировка Windows-1251 , то никаких проблем не происходит.

Кто-то может подсказать как решить сию проблему?

Обязательно требование сохранить кодировку у файлов UTF-8 и заставить Windows нормально с ними работать. Это реально?

  • Вопрос задан более трёх лет назад
  • 16545 просмотров

Замечу так же что если убрать функцию setlocale() из приведенного выше кода, то изредка локаль вообще слетает на английскую и текст получается следующий:
Число: 19, месяц: November, день недели: Monday

Читайте также:  Обновление windows включить или нет

Чем это может быть обосновано?

Говорят под Windows strftime кладёт на выбранную кодировку в локали и работает в однобайтовой кодировке, соответствующей запрошенному языку.

Можно, разве что, перед каждыми подобными функциями (переключив на всякий случай локаль на знакомую винде), перекодировать ввод функции в однобайтную кодировку, вызывать ей, после чего перекодировать результат в utf-8.

Решение проблем неправильной кодировкой веб-страницы

При неправильной кодировке весь сайт или его часть отображаются в виде «кряпозяблов», т.е. непонятных символов, делающих текст нечитаемым. Такая ситуация может возникнуть при неверной настройке кодировки веб-сервера или при отсутствии настроек. Рассмотрим возможные варианты и способы устранения проблем

Неправильная кодировка HTML страниц

Создадим тестовый файлик:

Скопируем в него следующий HTML код, в котором отсутствует указание кодировки и посмотрим, какие проблемы могут с ним возникнуть и как их решить:

Как можно видеть, кодировка браузером определена неправильно:

Имеется несколько способов исправить эту ситуацию. Начнём с самого простого – явно указать кодировку для веб-страницы. Это делается метатегом, который должен быть расположен внутри тэга head:

Добавим эту строку к нашему тестовому файлику, чтобы получилось так:

Как мы можем убедиться на следующем скриншоте, проблема решена:

Если кодировка вашего файла отличается от UTF-8, то вместо неё поставьте windows-1251 или ту, которая соответствует кодировке веб-страницы. Чтобы научиться определять кодировку файлов, посмотрите эту инструкцию.

Это был самый простой способ исправления проблемы с кодировкой – без изменения настроек сервера.

Вернём наш тестовый файл в исходное состояние и продолжим изучение способов указания кодировки.

Если файлы .htaccess включены настройками Apache, то эти файлы можно использовать чтобы указывать кодировку отправляемых веб-сервером страниц. Чтобы включить поддержку файлов .htaccess в конфигурационном файле Apache ( /etc/apache2/apache2.conf ) найдите группу строк

И в ней замените

После этого сервер нужно перезапустить.

Файл .htaccess должен быть размещён в той же директории, что и сайт. Мой сайт размещён в корневой директории веб-сервера. Если у вас также, то теперь в папке /var/www/html/ создайте файл .htaccess и добавьте в него директиву AddDefaultCharset после которой укажите желаемую кодировку. Примеры

Можно указать кодировку, которая будет применена только к файлам определённого формата:

Набор файлов может быть любым, например:

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

Ещё один вариант, который также можно использовать в файле .htaccess для установки кодировки UTF-8:

Если сайт на PHP, то дополнительно может понадобиться продублировать кодировку с php_value default_charset:

Можно вместо создания файла .htaccess установить кодировку в конфигурационном файле веб-сервера. Для Apache CentOS/Fedora это файл httpd.conf, а на Debian/Ubuntu это файл apache2.conf. Добавьте следующую строку для установки кодировки и перезапустите веб-сервер, чтобы изменения вступили в силу:

Как установить UTF-8 кодировку в PHP

В PHP скрипте для установки кодировки используется header, например:

Обычно вместе с кодировкой также указывают тип содержимого (в примере вариант для HTML страницы):

Ещё один вариант для RSS ленты:

Читайте также:  Менеджер wifi сетей для windows

Помните, что функция header должна быть вызвана перед любым выводом в браузер. В противном случае (если вывод в браузер уже был сделан), то уже были отправлены и заголовки. Очевидно, что в этом случае их уже невозможно поменять. Если в браузер было выведено сообщение об ошибке, то заголовки также уже были отправлены и использование header вызовет ошибку. Для проверки, были ли уже отправлены заголовки, используйте headers_sent.

Описанный способ работает только когда PHP скрипт полностью генерирует содержимое страницы. Статические страницы (такие как html) вы должны сохранять в кодировке utf-8. Большинство веб серверов обратят внимание на кодировку файла и добавят соответствующий заголовок. На самом деле, сохранение PHP файла в кодировке utf-8 приведёт к такому же результату.

Неправильная кодировка результатов из базы данных MySQL

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

Нужно начать с определения кодировки ваших таблиц. Можно посмотреть в phpMyAdmin:

Обратите внимание на столбец «Сравнение», запись «utf8_unicode_ci» означает, что используется кодировка UTF-8.

Можно подключиться к СУБД MySQL и проверить кодировку таблиц без phpMyAdmin. Для этого:

Если вы забыли имя базы данных, то выполните команду:

Предположим, я хочу посмотреть кодировку для таблиц в базе данных information_schema

Если вы забыли имя таблиц, выполните:

Далее выполните команду, в которой имя_таблицы замените на настоящее имя таблицы:

Вы увидите примерно следующее:

Смотрите столбец Collation. В моём случае там utf8_general_ci, это, как и utf8_unicode_ci, кодировка UTF-8. Кстати, если вы не знаете в чём разница между кодировками utf8_general_ci, utf8_unicode_ci, utf8mb4_general_ci, utf8mb4_unicode_ci, а также какую кодировку выбрать для базы данных MySQL, то посмотрите эту статью.

Теперь, когда мы узнали кодировку (в моём случае это UTF-8), то при каждом подключении к СУБД MySQL нужно выполнять последовательно запросы:

В PHP это можно сделать примерно так:

Обратите внимание, что UTF8 вам нужно заменить на ту кодировку, которая используется для ваших таблиц.

Изменение кодировки файлов

Если вы решили пойти другим путём и вместо установки новой кодировки изменить кодировку ваших файлов, то посмотрите статью «Как конвертировать файлы в кодировку UTF-8 в Linux». В ней рассказано, как узнать текущую кодировку файлов и как конвертировать файлы в любую кодировку (не только UTF-8).

Как узнать, какую кодировку отправляет сервер

Если вы хотите узнать, какие настройки кодировки имеет веб-сервер (какую кодировку передаёт в заголовках), то воспользуйтесь следующей командой:

В ней вместо URL вставьте реальный адрес проверяемого сайта. Если сайт использует HTTPS, то укажите адрес сайта вместе с протоколом, например

Какую кодировку выбрать для веб-сайта

Рекомендуется выбрать кодировку UTF-8. Это более универсальная кодировка, практически, она стала стандартом. У вас не будет проблем с отображением необычных символов и букв из других алфавитов.

Читайте также:  Яндекс диск для windows 64 bit

Конвертация кодировок utf-8 и win-1251 в PHP через iconv

Обычно php страница или сайт имеет одну базовую кодировку. Я работаю только с UTF-8, но бывают случаи, когда приходится использовать какой-нибудь php файл с кодировкой win-1251, а передаваемые в него значения идут в кодировке UTF-8. В этом случае после исполнения скрипта появляются кракозябры.

Таких ситуаций может быть множество, например, при использовании функции отправки сообщений mail(), работе с PDF обработкой или даже при различных действиях с БД. В идеале нужно обязательно избавляться от таких хвостов и не допускать в коде функции конвертации, но если это просто невозможно, то на помощь вам придет функция iconv.

Синтаксис функции: $string= iconv(‘начальная кодировка’, ‘конечная кодировка’, $string);

Здесь $string — строка, кодировку которой мы изменяем

Из этого выходит, что для того, чтобы преобразовать строку из кодировки utf-8 в win-1251 нужно писать следующее: $string= iconv(‘utf-8’, ‘win-1251’, $string);

Из win-1251 в utf-8: $string= iconv(‘win-1251’, ‘utf-8’, $string);

На заметку, помните, что кодировку в php странице можно указывать за счет установки header-а документа. Например, если ваша страница в UTF-8 без BOM, то в самом начале документа ставьте: . Если же windows 1251, то сам документ должен быть в ANSI, а в первой строке можете поставить: . Иногда эти манипуляции помогают с письмами, которые приходят в кракозябрах из-за неверной кодировки.

Поддерживаемые кодировки символов

В настоящее время модулем mbstring поддерживаются следующие кодировки символов. Любая из этих кодировок символов может быть указаны в параметре encoding функций mbstring .

Следующие кодировки символов поддерживаются в этом расширении PHP:

  • UCS-4*
  • UCS-4BE
  • UCS-4LE*
  • UCS-2
  • UCS-2BE
  • UCS-2LE
  • UTF-32*
  • UTF-32BE*
  • UTF-32LE*
  • UTF-16*
  • UTF-16BE*
  • UTF-16LE*
  • UTF-7
  • UTF7-IMAP
  • UTF-8*
  • ASCII*
  • EUC-JP*
  • SJIS*
  • eucJP-win*
  • SJIS-win*
  • ISO-2022-JP
  • ISO-2022-JP-MS
  • CP932
  • CP51932
  • SJIS-mac** (alias: MacJapanese)
  • SJIS-Mobile#DOCOMO** (alias: SJIS-DOCOMO)
  • SJIS-Mobile#KDDI** (alias: SJIS-KDDI)
  • SJIS-Mobile#SOFTBANK** (alias: SJIS-SOFTBANK)
  • UTF-8-Mobile#DOCOMO** (alias: UTF-8-DOCOMO)
  • UTF-8-Mobile#KDDI-A**
  • UTF-8-Mobile#KDDI-B** (alias: UTF-8-KDDI)
  • UTF-8-Mobile#SOFTBANK** (alias: UTF-8-SOFTBANK)
  • ISO-2022-JP-MOBILE#KDDI** (alias: ISO-2022-JP-KDDI)
  • JIS
  • JIS-ms
  • CP50220
  • CP50220raw
  • CP50221
  • CP50222
  • ISO-8859-1*
  • ISO-8859-2*
  • ISO-8859-3*
  • ISO-8859-4*
  • ISO-8859-5*
  • ISO-8859-6*
  • ISO-8859-7*
  • ISO-8859-8*
  • ISO-8859-9*
  • ISO-8859-10*
  • ISO-8859-13*
  • ISO-8859-14*
  • ISO-8859-15*
  • ISO-8859-16*
  • byte2be
  • byte2le
  • byte4be
  • byte4le
  • BASE64
  • HTML-ENTITIES (alias: HTML)
  • 7bit
  • 8bit
  • EUC-CN*
  • CP936
  • GB18030**
  • HZ
  • EUC-TW*
  • CP950
  • BIG-5*
  • EUC-KR*
  • UHC (alias: CP949)
  • ISO-2022-KR
  • Windows-1251 (alias: CP1251)
  • Windows-1252 (alias: CP1252)
  • CP866 (alias: IBM866)
  • KOI8-R*
  • KOI8-U*
  • ArmSCII-8 (alias: ArmSCII8)

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

** обозначает кодировки, доступные с PHP 5.4.0.

Любая запись в php.ini , которая принимает имя кодировки, может также использовать значения » auto » и » pass «. Функции mbstring , которые принимают имя кодировки, также могут использовать значение » auto «.

Если установлено значение » pass «, преобразование кодировки не производится.

Если установлено значение » auto «, оно расширяется списком кодировок, определённым в NLS (настройках национального языка). Например, если NLS установлен в Japanese , предполагается, что значение будет из списка » ASCII,JIS,UTF-8,EUC-JP,SJIS «.

Оцените статью