html-страница отображает кириллические символы ОК, если содержит charset = windows-1251, но не utf-8 - PullRequest
0 голосов
/ 23 ноября 2011

Ну ... HTML-страницы и таблицы MySQL содержат кириллический текст. Для отображения кириллического текста Барысаў2000 я использую

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

на веб-странице. Для хранения этого слова в таблице MySQL используется сортировка utf8_unicode_ci (я читал некоторые темы и, как я понимаю, для хранения кириллических символов рекомендуется utf8_unicode_ci). Но, что я на самом деле вижу с помощью phpMyAdmin, текст Барысаў2000 хранится как Áàðûñà ¢ 2000 в БД, и это проблема, которую я хочу решить. (Метод POST + экранирование опасных символов используются для сохранения текста пользователя в БД). Но когда вы ВЫБИРАЕТЕ эти данные и отображаете их на html-странице, они выглядят хорошо: Барысаў2000.

Проблема, как phpMyAdmin отображает ее для меня, не беспокоила меня до сегодняшнего дня. Сегодня я пытался ее решить.

Я догадался, что мне нужно везде использовать utf-8, поэтому я переключился с

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

до

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

Теперь на моих страницах вместо кириллических символов отображаются вопросы, и вопрос с отображением кириллического текста в моей БД не был решен. Кто может сказать мне, в чем проблема? Постскриптум Я могу читать сербские и белорусские (кириллические) веб-сайты без каких-либо проблем и печатать кириллицу на моем локальном хосте.

Спасибо.

1 Ответ

2 голосов
/ 24 ноября 2011

Проблема с phpMyAdmin, вероятно, вызвана неправильным угадыванием кодировки символов.Если вы закодируете текст Барысаў2000, используя кодировку windows 1251, вы получите поток байтов C1 E0 F0 FB F1 E0 A2 32 30 30 30 0D 0A.Если этот поток байтов интерпретируется как текст с кодировкой ISO-8859-1 или windows-1252, результат отображается как Áàðûñà¢2000.

Это говорит о том, что строки в вашей базе данных действительно хранятся с windows-1251 кодировка.Затем, если вы выводите эти строки и утверждаете, что в них используется кодировка UTF-8 (без какой-либо перекодировки), результатом будет текст мусора, поскольку этот поток байтов содержит недопустимые последовательности байтов UTF-8.

Вам следует либопродолжайте обслуживать свои страницы с помощью набора символов windows-1251 и скажите phpMyAdmin, чтобы он тоже использовал этот набор символов, иначе вам следует переключаться на unicode везде (в том числе внутри базы данных).Чем меньше преобразований символов и угадывания нужной вам кодировки, тем проще будет поддерживать вашу систему.

...