Веб-дизайн и поисковая оптимизация. Неправильная кодировка результатов из базы данных MySQL

Создание формы обратной связи

О проблемах с кодировкой файлов

При создании формы обратной связи частенько возникают проблемы с кодировкой файлов, из-за чего приходящее на E-mail письмо состоит из замечательных квадратиков, ромбиков и других "кракозяблов".

Рассмотрим это вопиющее недоразумение подробнее. Как известно, кодировка (charset) - это метод представления символов для их передачи. В конце концов, любая информация, циркулирующая в компьютере - это последовательность нулей и единиц. Кодировка символов состоит из нескольких байтов, обычно от 1 до 4. Кодировок существует множество, и браузер должен правильно определить, в какой из них написана открываемая страничка сайта.

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

Начинающие веб-дизайнеры иногда ошибочно считают, что достаточно вставить нужный мета-тег в начало страницы - и всё будет ОК! Это заблуждение. Как справедливо писал Козьма Прутков: "Если на клетке со слоном увидишь надпись "Буйвол" – не верь глазам своим." Необходимо не только написать, к примеру, charset=utf-8, но и проследить, что страница реально сделана в указанной кодировке .

Истинную кодировку страницы проще всего узнать, открыв её в любом браузере и выбрав в меню пункт Вид - Кодировка . Изменяя кодировки, определите, при какой из них страница отображается правильно - это и будет ваша реальная кодировка. Её и указывайте в мета-теге. Если вы хотите изменить кодировку, то для этого необходимо зайти в установки программы, с помощью которой вы создаете сайт, и задать требуемую кодировку. Например, в программе Adobe Dreamweaver для этого надо выбрать раздел меню Редактировать - Установки...- Создать документ - Кодировка по умолчанию . Обычно используют кодировки charset=utf-8 или charset=windows-1251 .

Замечание : мета-тег указания кодировки желательно размещать в самом начале HTML-кода сразу за тегом , чтобы браузер выбрал правильную кодировку уже перед выводом названия страницы (тег ...), которое показывается на синей полосе вверху окна браузера. В противном случае, вместо мы можем увидеть всё те же замечательные квадратики и ромбики.</p> </blockquote> <p>Абсолютно не нужные нам проблемы с кодировкой возникают и тогда, когда страничка сайта состоит из нескольких файлов, например, вставки фреймов, скриптов <b>JavaScript </b> и т.п. Необходимо следить, чтобы все эти части были созданы в одной кодировке. Кстати, именно для этого случая в почтовых программах, например, на mail.ru , обычно есть несколько кнопок ручного переключения кодировок, так как автоматически определить, в какой кодировке написано приходящее на почту письмо, иногда бывает затруднительно.</p> <p>Возвращаясь к нашей форме обратной связи , следует учесть, что данные о кодировке сообщения могут измениться при пересылке. Упрощенно, механизм доставки письма с формы на ваш E-mail выглядит следующим образом. Сначала письмо попадает на промежуточный <a href="/kak-uznat-kakie-filtry-nastroeny-yashchike-chto-takoe-filtry-v.html">почтовый ящик</a> на сервере вашего хостинга, а уже с него посылается на указанный вами в РНР-файле адрес. Этот промежуточный ящик вы легко найдете, заглянув в панели управления вашего сайта в раздел <b>Почта </b>. Весь этот процесс происходит под управлением РНР-программы. Следовательно, в ней тоже полезно лишний раз указать правильную кодировку вашего файла.</p> <p>Для этого необходимо в РНР-файле (в нашей форме <a href="/avtomatizirovannoi-programmoi-rassylki-v-skaip-obratnaya-svyaz-s.html">обратной связи</a> это <b>mail.php </b>) добавить строку заголовков (<b>headers </b>), которая служит для определения в <a href="/server-ishodyashchei-pochty-yandeks-na-iphone-pochtovoi-programme-predustanovlennoi-na-vashem-mobilnom-us.html">почтовой программе</a> некоторых <a href="/additional-options-for-downloading-the-number-of-processors-are-windows-10-how-to-enable-all-the-cpu-cores.html">дополнительных параметров</a> письма: тип документа <b>text/plain </b> (простой текст), адрес отправителя, кодировку и др. Для нашего случая добавим следующую строчку заголовков(<b>headers </b>)с указанием кодировки:<br> $to = "pupkin@rambler.ru "; //Здесь укажите свой адрес<br> $headers = "Content-type: text/plain; charset=utf-8";<br> $subject = "Сообщение с вашего сайта";<br> $message = "Имя пославшего: $name \nЭлектронный адрес: $email \nСообщение: $mess";<br> $send = mail ($to, $subject, $message, $headers);</p> <p>Так же неплохо сообщить браузеру о правильной кодировке добавлением в РНР-страницу отправки формы обратной связи (см. "Создание формы обратной связи ") заголовка с мета-тегом<br> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.</p> <p>Проблемы с кодировкой возникают и в том случае, если вы используете на странице скрипты для вывода какого-либо текста, например, бегущей строки, даты и т.п. Для изменения кодировки скрипта можно воспользоваться <b><a href="/kak-narisovat-grafik-v-word-kak-delat-diagrammy-v-vorde-postroenie.html">Microsoft Word</a> </b>. Для этого откройте документ, задайте <a href="/how-to-change-the-encoding-to-cyrillic-how-to-change-the-encoding-in-notepad-by-default-from-ansi-to-another.html">нужную кодировку</a>, если он выводится неверно (как это сделать, смотрите в "Справке Word"), а затем сохраните его следующим путем: <b>Файл - Сохранить как - Обычный текст - Сохранить </b>. В открывшемся окне вы можете задать необходимую кодировку, совпадающую с кодировкой вашей страницы.<br></p> <p>К сожалению, описанные <a href="/rewrite-information-from-the-camcorder-tape-to-a-disc-how-to-digitize-the-oldest-video-cassettes-with-the-help-of-a-computer-a-video-camera-or-other-equipment-with-your-own-hands-at-home.html">простые приемы</a> указания кодировки не всегда избавляют от ошибок при её определении. Иногда требуется серьезное хирургическое вмешательство в работу РНР-машины. Нужную информацию о таких операциях вы без труда, но при наличии желания, найдете в справочнике под названием "Интернет" - мышь вам в руки!</p> <p><i> 18.03.2011 г. </i></p> <ul> Ещё статьи по теме "Создание, оптимизация и раскрутка сайта": </ul> <p><b>Сожержание </b></p> <p>I. История кодирования информации………………………………..3</p> <p>II. Кодирование информации…………………………………………4</p> <p>III. Кодирование <a href="/otkroite-dokument-bukva-rtf-iz-papki-zagotovki-prakticheskaya-rabota.html">текстовой информации</a>…………………………….4</p> <p>IV. Виды таблиц кодировок…………………………………………...6</p> <p>V. Расчет количества текстовой информации………………………14</p> <p>Список используемой литературы…………………………………..16</p> <p><b>I </b><b>. История кодирования информации </b></p> <p>Человечество использует шифрование (кодировку) текста с того самого момента, когда появилась первая секретная информация. Перед вами несколько приёмов кодирования текста, которые были изобретены на различных этапах развития человеческой мысли:</p> <ul><p>криптография – это тайнопись, система изменения письма с целью сделать текст непонятным для непосвященных лиц;</p> </ul><ul><p>азбука Морзе или неравномерный телеграфный код, в котором каждая буква или знак представлены своей комбинацией коротких элементарных посылок электрического тока (точек) и элементарных посылок утроенной продолжительности (тире);</p> </ul><img src='https://i2.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/m3f596bdb.jpg' align="LEFT" height="250" width="250" loading=lazy><p>Один из самых первых известных методов шифрования носит имя римского императора Юлия Цезаря (I век до н.э.) . Этот метод основан на замене каждой буквы шифруемого текста, на другую, путем смещения в алфавите от исходной буквы на фиксированное количество символов, причем алфавит читается по кругу, то есть после буквы я рассматривается а. Так слово «байт» при смещении на два символа вправо кодируется словом «гвлф». Обратный процесс расшифровки данного слова – необходимо заменять каждую зашифрованную букву, на вторую слева от неё.</p> <p><b>II. </b><b>Кодирование информации </b></p> <p>Код – это набор условных обозначений (или сигналов) для записи (или передачи) некоторых заранее определенных понятий.</p> <p>Кодирование информации – это процесс формирования определенного представления информации. В более узком смысле под термином «кодирование» часто понимают переход от одной формы представления информации к другой, более удобной для хранения, передачи или обработки.</p> <p>Обычно каждый образ при кодировании (иногда говорят – шифровке) представлении отдельным знаком.</p> <p>Знак - это элемент конечного множества отличных друг от друга элементов.</p> <p>В более узком смысле под термином "кодирование" часто понимают переход от одной формы представления информации к другой, более удобной для хранения, передачи или обработки.</p> <p>На компьютере можно обрабатывать текстовую информацию. При вводе в компьютер каждая буква кодируется определенным числом, а при выводе на внешние устройства (экран или печать) для восприятия человеком по этим числам строятся изображения букв. Соответствие между набором букв и числами называется кодировкой символов.</p> <p>Как правило, все числа в компьютере представляются с помощью нулей и единиц (а не десяти цифр, как это привычно для людей). Иными словами, компьютеры обычно работают в двоичной системе счисления, поскольку при этом устройства для их обработки получаются значительно более простыми. Ввод чисел в компьютер и вывод их для чтения человеком может осуществляться в привычной десятичной форме, а все необходимые преобразования выполняют программы, работающие на компьютере.</p> <p><b>III. </b><b>Кодирование текстовой информации </b></p> <p>Одна и та же информация может быть представлена (закодирована) в нескольких формах. C появлением компьютеров возникла необходимость кодирования всех видов информации, с которыми имеет дело и отдельный человек, и человечество в целом. Но решать задачу кодирования информации человечество начало задолго до появления компьютеров. Грандиозные достижения человечества - письменность и арифметика - есть не что иное, как система кодирования речи и числовой информации. Информация никогда не появляется в чистом виде, она всегда как-то представлена, как-то закодирована.</p> <p>Двоичное кодирование – один из распространенных способов представления информации. В вычислительных машинах, в роботах и станках с числовым программным управлением, как правило, вся информация, с которой имеет дело устройство, кодируется в виде слов двоичного алфавита.</p> <p>Начиная с конца 60-х годов, компьютеры все больше стали использоваться для обработки текстовой информации, и в настоящее время основная доля персональных компьютеров в мире (и большая часть времени) занята обработкой именно текстовой информации. Все эти виды информации в компьютере представлены в двоичном коде, т. е. используется алфавит мощностью два (всего два символа 0 и 1). Связано это с тем, что удобно представлять информацию в виде последовательности электрических импульсов: импульс отсутствует (0), импульс есть (1).</p> <p>Такое кодирование принято называть двоичным, а сами логические последовательности нулей и единиц - машинным языком.</p> <p>С точки зрения ЭВМ текст состоит из <a href="/how-to-create-an-addition-formula-in-the-excel-relative-and-absolute-references.html">отдельных символов</a>. К числу символов принадлежат не только буквы (заглавные или строчные, латинские или русские), но и цифры, знаки препинания, спецсимволы типа "=", "(", "&" и т.п. и даже (обратите <a href="/kak-naiti-ukradennyi-telefon-cherez-gugl-kak-otsledit-ukradennyi.html">особое внимание</a>!) пробелы между словами.</p> <p>Тексты вводятся в память компьютера с помощью клавиатуры. На клавишах написаны привычные нам буквы, цифры, знаки препинания и другие символы. В оперативную память они попадают в двоичном коде. Это значит, что каждый символ представляется 8-разрядным двоичным кодом.</p> <p>Т<img src='https://i0.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/170fbe88.jpg' align="LEFT" height="200" width="250" loading=lazy>радиционно для кодирования одного символа используется количество информации, равное 1 байту, т. е. I = 1 байт = 8 бит. При помощи формулы, которая связывает между собой количество возможных событий К и количество информации I, можно вычислить сколько различных символов можно закодировать (считая, что символы - это возможные события): К = 2 I = 2 8 = 256, т. е. для представления текстовой информации можно использовать алфавит мощностью 256 символов.</p> <p>Такое количество символов вполне достаточно для пред­ставления текстовой информации, включая прописные и строчные буквы русского и латинского алфавита, цифры, знаки, графические символы и пр.</p> <p>Кодирование заключается в том, что каждому символу ставится в соответствие уникальный десятичный код от 0 до 255 или соответствующий ему двоичный код от 00000000 до 11111111. Таким образом, человек различает символы по их начертанию, а компьютер - по их коду.</p> <p>Удобство побайтового кодирования символов очевидно, поскольку байт - наименьшая адресуемая часть памяти и, следовательно, процессор может обратиться к каждому символу отдельно, выполняя обработку текста. С другой стороны, 256 символов – это вполне достаточное количество для представления самой разнообразной символьной информации.</p> <p>В процессе вывода символа на экран компьютера произ­водится обратный процесс - декодирование, то есть преоб­разование кода символа в его изображение. Важно, что присвоение символу конкретного кода - это вопрос соглашения, которое фиксируется в кодовой табли­це.</p> <p>Теперь возникает вопрос, какой именно восьмиразрядный двоичный код поставить в соответствие каждому символу. Понятно, что это дело условное, можно придумать множество способов кодировки.</p> <p>Все символы компьютерного алфавита пронумерованы от 0 до 255. Каждому номеру соответствует восьмиразрядный двоичный код от 00000000 до 11111111. Этот код просто порядковый номер символа в двоичной системе счисления.</p> <p><b>IV </b><b>. Виды таблиц кодировок </b></p> <p>Таблица, в которой всем символам компьютерного алфавита поставлены в соответствие порядковые номера, называется таблицей кодировки.</p> <p>Для <a href="/review-huawei-nova-workhorsesssss.html">разных типов</a> ЭВМ используются различные таблицы кодировки.</p> <p>В качестве международного стандарта принята <a href="/code-table-of-windows-russian-letters-direct-conversion-bytechar.html">кодовая таблица</a> ASCII (American Standard Code for Information Interchange - Американский стандартный код для информационного обмена), кодирующая первую половину символов с числовыми кодами от 0 до 127 (коды от 0 до 32 отведены не символам, а функциональным клавишам).</p> <p>Таблица кодов ASCII делится на две части.</p> <p>Международным стандартом является лишь первая половина таблицы, т.е. символы с номерами от 0 (00000000), до 127 (01111111).</p> <p><b>Структура таблицы кодировки ASCII </b></p> <table width="665" border="1" bordercolor="#000000" cellpadding="8" cellspacing="0"><tr valign="TOP"><td width="152"> <p><b>Порядковый номер </b></p> </td> <td width="127"> </td> <td width="336"> <p><b>Символ </b></p> </td> </tr><tr><td width="152"> </td> <td width="127"> <p>00000000 - 00011111</p> </td> <td width="336" valign="TOP"> <p>Символы с номерами от 0 до 31 принято называть управляющими.</p> <p>Их функция – управление процессом вывода текста на экран или печать, подача <a href="/five-signals-when-the-computer-is-turned-on-ami-beeps.html">звукового сигнала</a>, разметка текста и т.п.</p> </td> </tr><tr><td width="152"> </td> <td width="127"> <p>0100000 - 01111111</p> </td> <td width="336" valign="TOP"> <p>Стандартная часть таблицы (английский). Сюда входят строчные и <a href="/kak-pisat-na-klaviature-propisnymi-bukvami-kak-napisat.html">прописные буквы</a> латинского алфавита, десятичные цифры, знаки препинания, всевозможные скобки, коммерческие и другие символы.</p> <p>Символ 32 - пробел, т.е. пустая позиция в тексте.</p> <p>Все остальные отражаются определенными знаками.</p> </td> </tr><tr><td width="152"> </td> <td width="127"> <p>10000000 - 11111111</p> </td> <td width="336" valign="TOP"> <p>Альтернативная часть таблицы (русская).</p> <p>Вторая половина кодовой таблицы ASCII, называемая кодовой страницей (128 кодов, начиная с 10000000 и кончая 11111111), может иметь различные варианты, каждый вариант имеет свой номер.</p> <p>Кодовая страница в первую очередь используется для размещения <a href="/problemy-dlya-kodirovaniya-nacionalnyh-alfavitov-veb-dizain-i.html">национальных алфавитов</a>, отличных от латинского. В русских национальных кодировках в этой части таблицы размещаются символы русского алфавита.</p> </td> </tr></table><p><img src='https://i0.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/6a0e2beb.png' align="LEFT" width="100%" loading=lazy><br></p> <p><b>Первая половина таблицы кодов ASCII </b></p> <p>Обращается внимание на то, что в таблице кодировки буквы (прописные и строчные) располагаются в алфавитном порядке, а цифры упорядочены по возрастанию значений. Такое соблюдение лексикографического порядка в расположении символов называется принципом последовательного кодирования алфавита.</p> <p>Для букв русского алфавита также соблюдается принцип последовательного кодирования.</p> <p><b>Вторая половина таблицы кодов ASCII </b></p> <p>К сожалению, в настоящее время существуют пять различных кодировок кириллицы (КОИ8-Р, Windows. MS-DOS, Macintosh и ISO). Из-за этого часто возникают проблемы с переносом русского текста с одного компьютера на другой, из одной программной системы в другую.</p> <p>Хронологически одним из первых стандартов кодирования русских букв на компьютерах был КОИ8 ("Код обмена информацией, 8-битный"). Эта кодировка применялась еще в 70-ые годы на компьютерах серии ЕС ЭВМ, а с середины 80-х стала использоваться в первых русифицированных версиях операционной системы UNIX.</p> <p><img src='https://i2.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/21db3454.png' height="215" width="368" loading=lazy></p> <p>От начала 90-х годов, времени господства операционной системы MS DOS, остается кодировка CP866 ("CP" означает "Code Page", "кодовая страница").</p> <p>Компьютеры фирмы Apple, работающие под управлением операционной системы Mac OS, используют свою собственную кодировку Mac.</p> <p><img src='https://i2.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/ma21f385.png' width="100%" loading=lazy></p> <p>Кроме того, Международная организация по стандартизации (International Standards Organization, ISO) утвердила в качестве стандарта для русского языка еще одну кодировку под названием ISO 8859-5.</p> <p><img src='https://i1.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/m6c69a783.png' width="100%" loading=lazy></p> <p>Наиболее распространенной в настоящее время является кодировка Microsoft Windows, обозначаемая сокращением CP1251. Введена <a href="/dokumenty-vord-i-eksel-na-android-pochemu-stoit-skachat-microsoft-office-mobile-na.html">компанией Microsoft</a>; с учетом широкого распространения операционных систем (ОС) и других программных продуктов этой компании в Российской Федерации она нашла широкое распространение.</p> <p><img src='https://i0.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/44e6e468.png' height="219" width="369" loading=lazy></p> <p>С конца 90-х годов проблема стандартизации символьного кодирования решается введением нового международного стандарта, который называется Unicode.</p> <p><img src='https://i2.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/m3ecd86d2.jpg' align="BOTTOM" width="100%" loading=lazy></p> <p>Это 16-разрядная кодировка, т.е. в ней на каждый символ отводится 2 байта памяти. Конечно, при этом объем занимаемой памяти увеличивается в 2 раза. Но зато такая кодовая таблица допускает включение до 65536 символов. Полная спецификация стандарта Unicode включает в себя все существующие, вымершие и искусственно созданные алфавиты мира, а также множество математических, музыкальных, химических и прочих символов.</p> <p><b>Внутреннее представление слов в памяти компьютера </b></p> <p><b>с помощью таблицы ASCII </b></p> <p>Иногда бывает так, что текст, состоящий из букв русского алфавита, полученный с другого компьютера, невозможно прочитать - на экране монитора видна какая-то "абракадабра". Это происходит оттого, что на компьютерах применяется разная кодировка символов русского языка.</p> <p><img src='https://i1.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/m60d41ad8.png' align="LEFT" width="100%" loading=lazy><br></p> <p>Таким образом, каждая кодировка задается своей собственной кодовой таблицей. Как видно из таблицы, одному и тому же двоич­ному коду в различных кодировках поставлены в соответ­ствие различные символы.</p> <p>Н<img src='https://i2.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/m648edd26.png' align="LEFT" height="601" width="600" loading=lazy>апример, последовательность числовых кодов 221, 194, 204 в кодировке СР1251 образует слово «ЭВМ», тогда как в других кодировках это будет бессмысленный набор символов.</p> <p>К счастью, в большинстве случаев пользователь не дол­жен заботиться о перекодировках текстовых документов, так как это делают специальные программы-конверторы, встроенные в приложения.</p> <p><b>V </b><b>. Расчет количества текстовой информации </b></p> <p><u>Задача 1: </u> Закодируйте слово “Рим” с помощью таблиц кодировок КОИ8-Р и CP1251.</p> <p><i>Решение: </i></p> <p><img src='https://i0.wp.com/works.doklad.ru/images/CQ1qHm4HsRY/3dca650a.jpg' align="BOTTOM" width="100%" loading=lazy></p> <p><u>Задача 2: </u> Считая, что каждый символ кодируется одним байтом, оцените информационный объем следующего предложения:</p> <p>“Мой дядя самых честных правил,</p> <p>Когда не в шутку занемог,</p> <p>Он уважать себя заставил</p> <p>И лучше выдумать не мог.”</p> <p><i>Решение: </i> В данной фразе 108 символов, учитывая знаки препинания, кавычки и пробелы. Умножаем это количество на 8 бит. Получаем 108*8=864 бита.</p> <p><u>Задача 3: </u> Два текста содержат одинаковое количество символов. Первый текст записан на русском языке, а второй на языке племени нагури, алфавит которого состоит из 16 символов. Чей текст несет большее количество информации?</p> <p><i>Решение: </i></p> <p>1) I = К * а (информационный объем текста равен произведению числа символов на информационный вес одного символа).</p> <p>2) Т.к. оба текста имеют одинаковое число символов (К), то разница зависит от информативности одного символа алфавита (а).</p> <p>3) 2 а1 = 32, т.е. а 1 = 5 бит, 2 а2 = 16, т.е. а 2 = 4 бит.</p> <p>4) I 1 = К * 5 бит, I 2 = К * 4 бит.</p> <p>5) Значит, текст, записанный на русском языке в 5/4 раза несет больше информации.</p> <p><b>Задача 4: </b> Объем сообщения, содержащего 2048 символов, составил 1/512 часть Мбайта. Определить мощность алфавита.</p> <p><i>Решение: </i></p> <p>1) I = 1/512 * 1024 * 1024 * 8 = 16384 бит – перевели в биты информационный объем сообщения.</p> <p>2) а = I / К = 16384 /1024 =16 бит – приходится на один символ алфавита.</p> <p>3) 2*16*2048 = 65536 символов – мощность использованного алфавита.</p> <p><u>Задача 5: </u> Лазерный принтер Canon LBP печатает со скоростью в среднем 6,3 Кбит в секунду. Сколько времени понадобится для распечатки 8-ми страничного документа, если известно, что на одной странице в среднем по 45 строк, в строке 70 символов (1 символ – 1 байт)?</p> <p><i>Решение: </i></p> <p>1) Находим количество информации, содержащейся на 1 странице: 45 * 70 * 8 бит = 25200 бит</p> <p>2) Находим количество информации на 8 страницах: 25200 * 8 = 201600 бит</p> <p>3) Приводим к единым единицам измерения. Для этого Мбиты переводим в биты: 6,3*1024=6451,2 бит/сек.</p> <p>4) Находим время печати: 201600: 6451,2 =31 секунда.</p> <p><b>Список используемой литературы </b></p> <ol><p>Агеев В.М. Теория информации и кодирования: дискретизация и кодирование измерительной информации. - М.: МАИ, 1977.</p><p>Кузьмин И.В., Кедрус В.А. Основы теории информации и кодирования. - Киев, Вища школа, 1986.</p><p>Простейшие методы шифрования текста/ Д.М. Златопольский. – М.: Чистые пруды, 2007 – 32 с.</p><p>Угринович Н.Д. Информатика и <a href="/gosudarstvennoe-regulirovanie-v-sfere-informacionnyh-tehnologii.html">информационные технологии</a>. Учебник для 10-11 классов / Н.Д.Угринович. – М.: БИНОМ. Лаборатория знаний, 2003. – 512 с.</p><p><u>http://school497.spb.edu.ru/uchint002/les10/les.html#n </u></p> </ol> <p>Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы разобрали <span>создание таблиц в html </span> . В данной статье я бы хотел рассказать о проблеме, с которой вы обязательно столкнетесь (если ещё не столкнулись) в своей практике. А проблема эта связана с <b>кодировкой на сайте </b>. Нередко бывает такая ситуация: ты сидишь, что-то придумываешь, в итоге твои мысли выражаются в написанный код. Открываешь своё творение в браузере, а там написана полная ерунда, или как обычно данную ерунду называют — "кракозябры" . Тут очевидно одно, что <b>проблема с кодировкой на сайте </b>. Скорее всего у вас по умолчанию стоит кодировка <span>windows-1251 (кирилица) </span>, а браузер пытается открыть ваш файл в кодировке utf-8 . Кратко о том, что такое кодировка. Кодировка — это некая таблица, которая каждому символу ставит в соответствие какой-то <a href="/how-to-change-the-machine-code-of-a-word-document-select-and-change-the-encoding-in-microsoft-word.html">машинный код</a>. Соответственно наши русские буквы в одной кодировке имеют один код, в других — другой код. Друзья, используйте везде кодировку utf-8 и будет вам счастье. По-другому utf-8 называется Юникод .</p> <p>Давайте создадим тестовый документ в Notepad++ и запишем следующий код.</p><p> <html> <meta charset="utf-8"/> <head><title>Проблемы с кодировкой

Тестируем проблемы с кодировкой

В меню Notepad++ проверьте, чтобы наверху стояло "Кодировки" — "Кодировать в ANSI". Мы сейчас с вами искусственно создадим проблему с кодировкой. Попробуйте сейчас открыть данный файл в браузере. Мы увидим иероглифы. Дело здесь в том, что мы создали наш файл в кодировке ANSI (кирилица), а браузеру сообщили, что наш файл в кодировке utf-8 () .

Причины, по которым возникают проблемы с кодировкой на сайте :

1) Неправильное значение атрибута charset у мета-тега.

2) В меню Notepad++ проверьте, чтобы кодировка файла была utf-8. Это нужно сделать "Кодировки" — "Кодировать в UTF-8 (без BOM)". В интернете можно найти определение, что такое "BOM", но оно малопонятное. Как я понял, в начале документа, ставится неразрывный пробел с нулевой шириной. Он нам не нужен, поэтому всегда ставьте "без BOM".

3) Бывает такое, что первые два пункта выполнены, но на страницах сайта всё равно появляется ерунда. Здесь проблема может быть в настройках сервера,т.е. хостинг напрямую передаёт заголовки для наших файлов и выставляет кодировку по умолчанию. Давайте попробуем отучить его это делать. В корневой директории сайта должен быть файл .htaccess . С помощью этого файла можно вносить корректировки в работу хостинга. Если данного файла у вас нет, то его нужно создать. Удобно это сделать в редакторе Notepad++. В данном файле необходимо написать следующий код:

AddDefaultCharset UTF-8

Данной инструкцией мы говорим серверу, что у нас кодировка по умолчанию "utf-8". Если это не помогло, то нужно написать в этом же файле следующий код:

Charsetdisable on AddDefaultCharset Off

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

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

Как в памяти компьютера хранятся символы (буквы)?

Каждая буква принадлежит определенному алфавиту, в котором символы следуют друг за другом и, следовательно, могут быть пронумерованы последовательными целыми числами. Каждой букве можно сопоставить целое положительное число и назвать его кодом символа. Именно этот код будет храниться в памяти компьютера, а при выводе на экран или бумагу «преобразовываться» в соответствующий ему символ. Чтобы отличить представление чисел от представления символов в памяти компьютера, приходится также хранить информацию о том, какие именно данные закодированы в конкретной области памяти.

Соответствие букв определенного алфавита с числами-кодами формирует так называемую таблицу кодирования. Другими словами, каждый символ конкретного алфавита имеет свой числовой код в соответствии с определенной таблицей кодирования .

Однако алфавитов в мире очень много (английский, русский, китайский и др.). Поэтому следующий вопрос:

Как закодировать все используемые на компьютере алфавиты?

Для ответа на этот вопрос пойдем историческим путем.

В 60-х годах XX века в американском национальном институте стандартизации (ANSI) была разработана таблица кодирования символов, которая впоследствии была использована во всех операционных системах. Эта таблица называется ASCII (American Standard Code for Information Interchange – американский стандартный код для обмена информацией). Чуть позже появилась расширенная версия ASCII.

В соответствие с таблицей кодирования ASCII для представления одного символа выделяется 1 байт (8 бит). Набор из 8 ячеек может принять 28 = 256 различных значений. Первые 128 значений (от 0 до 127) постоянны и формируют так называемую основную часть таблицы, куда входят десятичные цифры, буквы латинского алфавита (заглавные и строчные), знаки препинания (точка, запятая, скобки и др.), а также пробел и различные служебные символы (табуляция, перевод строки и др.). Значения от 128 до 255 формируют дополнительную часть таблицы, где принято кодировать символы национальных алфавитов.

Поскольку национальных алфавитов огромное множество, то расширенные ASCII-таблицы существуют во множестве вариантов. Даже для русского языка существуют несколько таблиц кодирования (распространены Windows-1251 и Koi8-r). Все это создает дополнительные трудности. Например, мы отправляем письмо, написанное в одной кодировке, а получатель пытается прочитать ее в другой. В результате видит кракозябры. Поэтому читающему требуется применить для текста другую таблицу кодирования.

Есть и другая проблема. В алфавитах некоторых языков слишком много символов и они не помещаются в отведенные им позиции с 128 до 255 однобайтовой кодировки.

Третья проблема - что делать, если в тексте используется несколько языков (например, русский, английский и французский)? Нельзя же использовать две таблицы сразу …

Чтобы решить эти проблемы одним разом была разработана кодировка Unicode.

Стандарт кодирования символов Unicode

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

В Unicode для кодирования символов предоставляется 31 бит (4 байта за вычетом одного бита). Количество возможных комбинаций дает запредельное число: 231 = 2 147 483 684 (т.е. более двух миллиардов). Поэтому Unicode описывает алфавиты всех известных языков, даже «мертвых» и выдуманных, включает многие математические и иные специальные символы. Однако информационная емкость 31-битового Unicode все равно остается слишком большой. Поэтому чаще используется сокращенная 16-битовая версия (216 = 65 536 значений), где кодируются все современные алфавиты.

В Unicode первые 128 кодов совпадают с таблицей ASCII.

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

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

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

Sudo gedit /var/www/html/encoding.html

Скопируем в него:

Проверка кодировки

Откроем этот файл в браузере

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

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

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

Проверка кодировки

Тестовый файл для проверки кодировки

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

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

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

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

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

Options Indexes FollowSymLinks AllowOverride None Require all granted

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

AllowOverride None

AllowOverride All

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

Sudo systemctl restart apache2.service

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

AddDefaultCharset UTF-8

AddDefaultCharset windows-1251

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

AddCharset utf-8 .atom .css .js .json .rss .vtt .xml

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

AddCharset utf-8 .html .css .php .txt .js

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

Header set Content-Type "text/html; charset=utf-8"

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

IndexOptions +Charset=UTF-8

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

AddDefaultCharset windows-1251 php_value default_charset "cp1251"

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

AddDefaultCharset UTF-8

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

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

Header("Content-Type: charset=utf-8");

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

Header("Content-Type: text/html; charset=utf-8");

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

Header("Content-type: text/xml; charset=utf-8");

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

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

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

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

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

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

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

Mysql -u root -p

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

SHOW DATABASES;

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

USE information_schema;

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

SHOW FULL COLUMNS FROM имя_таблицы;

Например:

SHOW FULL COLUMNS FROM GLOBAL_STATUS;

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

Смотрите столбец 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 нужно выполнять последовательно запросы:

SET NAMES UTF8 SET CHARACTER SET UTF8 SET character_set_client = UTF8 SET character_set_connection = UTF8 SET character_set_results = UTF8

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

$this->mysqli = new mysqli($server, $username, $password, $basename); if ($this->mysqli->connect_error) { $this->errorHandler_c->logError(1, "Connect Error (" . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error, $_SERVER ["REQUEST_URI"]); } $this->mysqli->query("SET NAMES UTF8"); $this->mysqli->query("SET CHARACTER SET UTF8"); $this->mysqli->query("SET character_set_client = UTF8"); $this->mysqli->query("SET character_set_connection = UTF8"); $this->mysqli->query("SET character_set_results = UTF8");

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

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

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

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

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

Curl URL -s -o /dev/null -D /dev/stdout | grep -E "charset"

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

Curl https://softocracy.ru -s -o /dev/null -D /dev/stdout | grep -E "charset"

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