Проблемы с кодировкой на сайте
Одной из самых частых проблем, с которой сталкивается начинающий Web-мастер (да и не только начинающие), это проблемы с кодировкой на сайте. Даже у меня постоянно появляется при создании сайтов "абракадабра". Но, благо, я прекрасно знаю, как эту проблему решить, поэтому всё привожу в порядок в течение нескольких секунд. И в этой статье я постараюсь научить Вас также быстро решать проблемы, связанные с кодировкой на сайте.
Первое, что стоит отметить, это то, что все проблемы с появлением "абракадабры" связаны с несовпадением кодировки документа и кодировки, выставляемой браузером. Допустим, документ в windows-1251, а браузер почему-то выставляет UTF-8. А уже источником такого несовпадения могут быть следующие причины.
Первая причина
Неправильно прописан мета-тег content-type. Будьте внимательны, в нём всегда должна находиться та кодировка, в котором написан Ваш документ.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Вторая причина
Вроде бы, мета-тег прописан так, как Вы хотите, и браузер выставляет именно то, что Вы хотите, но почему-то всё равно с кодировкой проблемы. Здесь, почти наверняка, виновато то, что сам документ имеет отличную кодировку. Если Вы работаете в Notepad++, то внизу справа есть название кодировки текущего документа (например, ANSI). Если Вы ставите в мета-теге UTF-8, а сам документ написан в ANSI, то сделайте преобразование в UTF-8 (через меню "Кодировки" и пункт "Преобразовать в UTF-8 без BOM").
Третья причина
Мета-тег написан правильно, кодировка документа верная, но браузер почему-то настойчиво выбирает другую кодировку. Это уже связано с настройками сервера. Способ решения данной проблемы можно прочитать здесь: как задать кодировку в htaccess.
Четвёртая причина
И, наконец, последняя популярная причина - это проблема с кодировкой в базе данных. Во-первых, убедитесь, что все Ваши таблицы и поля написаны в одной кодировке, которая совпадает с кодировкой остального сайта. Если это не помогло, то сразу после подключения в скрипте выполните следующий запрос:
SET NAMES 'utf8'
Вместо "utf8" может стоять другая кодировка. После этого все данные из базы должны выходить в правильной кодировке.
В данной статье я, надеюсь, разобрал, как минимум, 90% проблем, связанных с появлением "абракадабры" на сайте. Теперь Вы должны расправляться с такой популярной и простой проблемой, как неправильная кодировка, в два счёта.
-
- Михаил Русаков
Комментарии (33):
Помогите пожалуйста мне...Я делаю чат и все сообщения заносятся в файл log.html...но при выводе они становятся кракозябрами(русские буквы, а с английскими всё нормально)...Что мне делать
Ответить
Всё исправил но непонятно как... надо было обработчик и файл с сообщениями поставить в кодировку utf-8 а всё остальное оставить в кодировке windows-1251...И как он вообще работает...Интересно
Ответить
поменяй все на юникод тогда будет работать или своем браузере поменяй кодировку
Ответить
Здравствуйте Михаил! Проблема такая: в файле html кодировка написана так:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />, в проге нотпад++ стоит галочка UTF-8 без БOМ, при написание заголовка русские буквы видит коряво а англ норма, ставлю просто утф 8 все нормально! а рекомендуется делать без бoм! В чем проблема и как ее решить??? Спасибо!
Ответить
Аналогично...
Ответить
Спасибо Михаил))я разобрался со своей проблемой))спасибо)Удачи)
Ответить
У меня почему то с UTF 8 без BoM не работает, а с обычным Utf 8 прекрасно, чем они отличаются кто нить может объяснить?
Ответить
Они ничем не отличаются кроме того, что с BOM в начало файла добавляются невидимые символы, которые могут помешать в работе с php
Ответить
А что если заголовок (title) в кодировке без BOM отображается не корректно. Вы как это исправили, Михаил?
Ответить
Такого быть не должно. utf-8 без bom это практически та же кодировка.
Ответить
Обычная UTF-8 оставляет отметку которая указывает что файл записан в кодировке UTF-8, но как сказал выше Михаил это может помешать работе PHP. То что браузер без этой пометки не может определить кодировку файла ваша ошибка, убедитесь что вы корректно написали <meta charset="UTF-8">
Ответить
У меня так же.
Ответить
Михаил не один из выше перечисленных способов не подошёл, Помогите пожалуйста зарегистрировался на hostia и не могу там разобраться с кодировкой, вроде бы всё сделал правильно да и на локальном сервере работает и на других бесплатных хостингах тоже, а вот на hostia ерунда какая-то, и самое главное что кодировка нарушается только для тех страниц которые вывожу через БД.
Ответить
В самой базе может стоять другая кодировка.
Ответить
Михаил, у меня такая проблема ! Все что выводится из базы, нормально отображается. Но все, остальное идет иероглифами. Кодировка в мата-теге utf-8 в нотпаде тоже менял на utf-8 без бум, все равно не помогает. В чем может быть причина.
Ответить
А на сервере какая прописана проверили?
Ответить
И кстати у меня почему то документы css не работают.Вообще не могу поменять ни цвет текста ни цвет самого фона
Ответить
http://myrusakov.ru/kak-zadat-css-stil.html и используйте Firebug.
Ответить
привет,почему проблемы с кодировкой на хостинге,а на локальном сервере все нормально?.на сайте стоит кодировка utf8.есть файл htaccess.
Ответить
Напишите хостеру, возможно, он поможет. Быть может, он запретил использовать AddDefaultCharset.
Ответить
прописал эту строчку в конфигурационном файле и все норм.mysql_query ("SET NAMES 'utf8'");
Ответить
Михаил, здравствуйте. У меня была проблема с кодировкой вывода текста из php скрипта. Мне удалось решить проблему лишь путем явного указания внутренней кодировки mb_internal_encoding("UTF-8"); В перечисленных Вами способах, данный не указан. Вопрос: можно ли обойтись без явного указания ? //mb_internal_encoding("UTF-8");
Ответить
Если использовать строковые функции, то без указания кодировки не обойтись.
Ответить
Спасибо.
Ответить
Я сделал проще - header('Content-Type: text/html; charset=utf-8'); И все без проблем заработало)))
Ответить
Спасибо огромное,Михаил!!! Очень,очень помогли!!!
Ответить
У меня возникла проблема с поиском по базе данных. Предполагаю что дело все же в кодировке. На Денвере все работает хорошо (и английские и русские слова ищутся), проблема возникла после загрузки сайта на сервер. Хотя все кодировки вроде верны, но работает только поиск английских слов, по русским словам поиск не работает. Везде выставлял windows-1251 кодировку. В чем может быть дело?
Ответить
Я совершенно чайник в этом деле, но очень хочу научиться ... всё написала по Вашим советам... Вышло как Вы выразились "абракадабра"! и никакие исправления, о которых прочитала, не помогают исправить это... Я не понимаю, что ещё можно сделать? На странице нет ни цвета, ни цветных букв, и пишет какие то символы в место текста. ПАМАГИТЕ!!!
Ответить
Спасибо Миша!!! Реально все сработало, уже месяц мучился открывая в браузере свой сайт с абракодаброй, приходилось постоянно вручную в настройках браузера менять на utf-8, а то он автоматов ставил кириллицу. А надо было всего-лишь навсего сразу использовать один из ваших советов!!! Еще раз убедился в том, что с начала надо прочитать теорию, а потом приниматься за практику!!!!!!
Ответить
http://s020.radikal.ru/i704/1608/56/cf86718944e4.jpg вот такая у меня проблема - подскажете в чем вопрос???
Ответить
Спасибо, Михаил за Ваше терпение и помощь. Я не мог себе представить, что в 54 года меня что-то так увлечет. Я пока на начальном этапе и меня создание сайта увлекло как маленького ребенка.
Ответить
Специально зарегался чтобы поблагадарить, спасибо вам очень понятная статья, то что надо проблему устранил)
Ответить
На моём сайте на странице https://testy-online.com/TittlePassTestsPsychology/Relations_7 все русские символы выводились как кракозябалы. Пересохранила файл Relations_7.cshtml, указав кодировку UTF-8 в блокноте и всё стало отображаться правильно! Так что у меня была вторая причина, почему символы отображаются неправильно!
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.