проблема с кодировками php

Кракозябры вместо русских букв на сайте — 6 проблем и их решения

Когда я только начинал изучать тему разработки сайтов, кракозябры были одной из моих постоянных проблем. Создал HTML-страницу — в браузере кракозябры, установил денвер и попробовал создать сайт на PHP — снова вместо букв кракозябры. Скачал иностранную тему, подключился к базе данных — та же проблема.

На своих сайтах я обычно использую UTF-8 (это такая кодировка текста, она ещё называется юникод), соответственно она будет присутствовать во всех примерах в этой статье.

1. UTF-8 без BOM

Начнём с самой простой проблемы. Вы создали какой-то HTML-файл, открыли его в браузере и получили:

Проблема актуальна в основном для пользователей Windows, на маке я с таким ни разу не сталкивался.

Решение проблемы зависит в основном от того, каким редактором вы пользуетесь. Для пользователей Windows я рекомендую бесплатный офигительный Notepad++.

Значит, открываем файл в Notepad++ и переходим в Кодировки > Преобразовать в UTF-8 без BOM. Вопрос — почему без BOM? Потому что с BOM у вас будут постоянно вставляться пустые символы (на самом деле они не пустые, у них тоже есть своя функция, но нам она в данном случае не нужна) куда не надо, а для PHP это уже критично.

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

2. Мета тег charset

Если вы сделали то, что я описывал в предыдущем шаге и ваша проблема не разрешилась, тогда самое время испробовать второй метод устранения кракозябров.

Всё, что нам требуется, это вставить следующий код между тегами сайта. Прежде всего проверьте, возможно этот метатег у вас уже присутствует. Если да, то посмотрите какое у него стоит значение параметра charset.

В темах WordPress обычно этот тег уже имеется по умолчанию и выглядит следующим образом:

4. Заголовки сервера через header()

Ещё один способ определения кодировки. На этот раз через PHP. На WordPress никогда не приходилось им пользоваться.

Важно! Этот код должен вставляться до того, как будет что-либо выведено на странице сайта, иначе — ошибка.

5. Проблемы с последним символом при обрезке строки

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Как решить эту проблему?

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

6. MySQL

У меня не раз бывало такое, что я подключался к MySQL, вытаскивал какие-нибудь данные, и при их выводе на сайте, текст отображался кракозябрами.

Такое может произойти, если кодировка вашего сайта не совпадает с кодировкой базы данных, к которой вы подключаетесь. В WordPress обычно таких проблем не бывает.

Для того, чтобы исправить это, после подключения к БД, делаем следующее:

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

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Источник

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

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

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

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

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

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

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

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

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

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

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Если кодировка вашего файла отличается от 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:

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

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

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

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

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

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

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

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

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

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

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

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

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

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

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

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

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

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Смотрите столбец 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, то укажите адрес сайта вместе с протоколом, например

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

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

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

Источник

PHP Кодировка страницы

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Здравствуй уважаемый читатель блога LifeExample, кодировка веб страницы это очень интересный зверь, и за частую хищный для начинающих веб мастеров. Я уверен в том, что все новички сталкиваются с проблемой правильного отображения текста на страницах своего сайта. Ты дорогой читатель, наверное встречал в сети интернета ресурсы, на страницах которых отображался не читаемый текст, а кракозябры.

Кракозябрами в среде программирования веб сайтов принято называть символы не соответствующие тем, которые должны быть выведены на страницу. Например, на созданной вами странице должно отображаться приветствие: «Здравствуй читатель моего блога!», а на деле получаете непонятный набор закорючек «Р—РґСЂР°РІСЃС‚РІСѓР№ читатеРСЊ моего Р±РРѕРіР°!» – вот такие закорючки и есть злые КРАКОЗЯБРЫ.

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

И так, чтобы понять откуда появляются подобного рода иероглифы, нам нужно познакомиться с понятием кодировка страницы. Любой текст на компьютере представляется в виде набора байтов, в каждом из этих байтов определенным кодом — закодирован только один единственный символ. Так вот для того чтобы правильно расшифровать или раскодировать набор байтов и представить его в понятном человеку виде, браузеру нужно провести соответствие с одной из кодовых таблиц. Базовой кодировкой является ASCII кодировка, она содержит в себе коды 128 символов латинского алфавита и спец символов вроде скобок и решеток. Именно из ASCII появились первые русскосимвольные кодировки CP866 и KOI8-R, а из них вышла известная сегодняшним вебмастерам кодировка windows-1251. Не смотря на то, что все эти кодировки призваны для отображения русского текста, они все отличаются друг от друга кодами для одинаковых символов. Если текст писался в кодировке CP866, а браузер пытается раскодировать ее с помощью таблицы кодов windows-1251, то в результате мы получим не читаемые слова. Такое часто происходит при отправке сообщений через почтовый сервер.

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

Много было сказано относительно эволюции кодировок, и постановке самой задачи, пришло время поговорить о практических моментах.

Существует четыре места на кухне программирования сайта, которые требуют соблюдения единого стандатра кодирования текста.

Во всех этих составляющих сайта, должна использоваться единая кодировка, какая – решать вам, но я рекомендую utf-8, всетаки она универсальная)

И так теперь подробнее рассмотрим, что нужно сделать для того, чтобы привести к одной кодировке всеперечисленые составляющие.

Кодировки скриптов (шаг 1)

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Выбираем именно Convert to UTF-8 without BOM, а не просто Convert to UTF‑8. Приставка without BOM означает то что в первых двух байтах файла будет зашифрована специальная информация о параметре кодировки, в скриптах нам не нужна никакая лишняя информация. В большенстве случаев сохранение с BOM не окажется криминальным, но когданить один из скриптов откажется правильно работать и одной из причин может отазаться именно информация заключенная в первых байтах файла.

Кодировка таблиц MySQL. (шаг 2)

Для того, чтобы узнать какие кодировки используются в ваше MySQL базе, воспользуемся интерфейсом phpMyAdmin. В разделе SQL напишем запрос:

Выглядеть это должно вот так:

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Жмем ОК и получаем информацию о кодировках таблицы

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Значения на против character_set_client и character_set_results должны совпадать, так как эти параметры отвечают за кодировку, в которой данные поступают в базу и за кодировку в которой данные берутся из базы.

Если они у вас различаются, то нужно в PHP коде в ручную установить нужную кодировку. Делается это вот такой строчкой:

После этого три переменные character_set_client, character_set_connection и character_set_results примут значение utf8.
Подробнее о том как с помощью PHP работать с базой данных можно прочесть в статье PHP работа с базой данных (Часть 1-3).

Кодировка самой HTML страницы. (Шаг 3)

Теперь данные взятые с базы и данные обрабатываемые в php скрипте, будут совпадать по кодировке, и выводиться в понятном для человека тексте. Но это еще не все, нужно указать кодировку в разделе для мета тегов:

Либо в cкрипте настроек php командой:

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

Локаль используемая браузером пользователя. (Шаг 4)

Еще одна важная деталь при корректном отображении текста это установка локали:

При установки такой локали, пердставители других стран использующие другую кодовую страницу в своей операционной системе, будут видеть русский текст.

Мы рассмотрели основные моменты возникновения противоречий в кодировках веб страницы, подведем итоги. Для того чтобы ваш рускоязычный сайт был всегда доступен для чтения, необходимо прописать в PHP скрипте настроек такие строки:

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

Читайте также похожие статьи:

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Источник

Проблемы с кодировкой на сайте

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Одной из самых частых проблем, с которой сталкивается начинающий Web-мастер (да и не только начинающие), это проблемы с кодировкой на сайте. Даже у меня постоянно появляется при создании сайтов «абракадабра«. Но, благо, я прекрасно знаю, как эту проблему решить, поэтому всё привожу в порядок в течение нескольких секунд. И в этой статье я постараюсь научить Вас также быстро решать проблемы, связанные с кодировкой на сайте.

Первое, что стоит отметить, это то, что все проблемы с появлением «абракадабры» связаны с несовпадением кодировки документа и кодировки, выставляемой браузером. Допустим, документ в windows-1251, а браузер почему-то выставляет UTF-8. А уже источником такого несовпадения могут быть следующие причины.

Первая причина

Неправильно прописан мета-тег content-type. Будьте внимательны, в нём всегда должна находиться та кодировка, в котором написан Ваш документ.

Вторая причина

Вроде бы, мета-тег прописан так, как Вы хотите, и браузер выставляет именно то, что Вы хотите, но почему-то всё равно с кодировкой проблемы. Здесь, почти наверняка, виновато то, что сам документ имеет отличную кодировку. Если Вы работаете в Notepad++, то внизу справа есть название кодировки текущего документа (например, ANSI). Если Вы ставите в мета-теге UTF-8, а сам документ написан в ANSI, то сделайте преобразование в UTF-8 (через меню «Кодировки» и пункт «Преобразовать в UTF-8 без BOM«).

Третья причина

Мета-тег написан правильно, кодировка документа верная, но браузер почему-то настойчиво выбирает другую кодировку. Это уже связано с настройками сервера. Способ решения данной проблемы можно прочитать здесь: как задать кодировку в htaccess.

Четвёртая причина

Вместо «utf8» может стоять другая кодировка. После этого все данные из базы должны выходить в правильной кодировке.

В данной статье я, надеюсь, разобрал, как минимум, 90% проблем, связанных с появлением «абракадабры» на сайте. Теперь Вы должны расправляться с такой популярной и простой проблемой, как неправильная кодировка, в два счёта.

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Комментарии ( 33 ):

Помогите пожалуйста мне. Я делаю чат и все сообщения заносятся в файл log.html. но при выводе они становятся кракозябрами(русские буквы, а с английскими всё нормально). Что мне делать

Всё исправил но непонятно как. надо было обработчик и файл с сообщениями поставить в кодировку utf-8 а всё остальное оставить в кодировке windows-1251. И как он вообще работает. Интересно

поменяй все на юникод тогда будет работать или своем браузере поменяй кодировку

Спасибо Михаил))я разобрался со своей проблемой))спасибо)Удачи)

У меня почему то с UTF 8 без BoM не работает, а с обычным Utf 8 прекрасно, чем они отличаются кто нить может объяснить?

Они ничем не отличаются кроме того, что с BOM в начало файла добавляются невидимые символы, которые могут помешать в работе с php

А что если заголовок (title) в кодировке без BOM отображается не корректно. Вы как это исправили, Михаил?

Такого быть не должно. utf-8 без bom это практически та же кодировка.

Обычная UTF-8 оставляет отметку которая указывает что файл записан в кодировке UTF-8, но как сказал выше Михаил это может помешать работе PHP. То что браузер без этой пометки не может определить кодировку файла ваша ошибка, убедитесь что вы корректно написали

Михаил не один из выше перечисленных способов не подошёл, Помогите пожалуйста зарегистрировался на hostia и не могу там разобраться с кодировкой, вроде бы всё сделал правильно да и на локальном сервере работает и на других бесплатных хостингах тоже, а вот на hostia ерунда какая-то, и самое главное что кодировка нарушается только для тех страниц которые вывожу через БД.

В самой базе может стоять другая кодировка.

А на сервере какая прописана проверили?

И кстати у меня почему то документы css не работают.Вообще не могу поменять ни цвет текста ни цвет самого фона

http://myrusakov.ru/kak-zadat-css-stil.html и используйте Firebug.

привет,почему проблемы с кодировкой на хостинге,а на локальном сервере все нормально?.на сайте стоит кодировка utf8.есть файл htaccess.

Напишите хостеру, возможно, он поможет. Быть может, он запретил использовать AddDefaultCharset.

прописал эту строчку в конфигурационном файле и все норм.mysql_query («SET NAMES ‘utf8′»);

Если использовать строковые функции, то без указания кодировки не обойтись.

Источник

проблема с кодировкой при отправке POST запроса

Буду благодарен за любую помощь! Спасибо заранее!

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

Могут ли быть еще какие-либо варианты при которых кодировка меняется на стороне отправителя?

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

нужно обеспечить UTF-8 на всём пути.
— кодировка файла;
— кодировка соединения с сервером;
— кодировка соединения сервера с БД (если БД используется);
— кодировка в таблицах БД (если БД используется);
— банк должен принимать и отображать UTF-8 (глянь код страницы в банке, на всякий случай).

Если везде UTF-8, то проблем быть не должно.
Если проблема есть, значит где-то кодировка отличается.

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

@MikhailFedorov, стесняюсь спросить, но все-таки: «В какой кодировке данные ожидают в банке?» Что в документации по этому поводу написано?

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

1) Указанная страница не содержит указание кодировки в заголовке HTTP.
2) Разбираться надо с того, чтобы на своём сервере получить форму и прочитать «глазами»

проблема с кодировками php. Смотреть фото проблема с кодировками php. Смотреть картинку проблема с кодировками php. Картинка про проблема с кодировками php. Фото проблема с кодировками php

потом отлично выводится + пишется в БД.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *