Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: в MySQL utf-8 - выводятся ???
 
 автор: LouD   (01.12.2007 в 21:17)   письмо автору
 
 

Ситуация:
База MySQL, в параметрах таблицы кодировка utf8_unicode_ci
Тэг мета тоже настроен на отдачу utf-8 (<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />)

Но на сайте вместо спецсимволов немецкого языка - знаки ?
То есть &#220;ber uns превращается в ?ber uns

В каком месте копать?

Есть, правда, еще в <head> один тэг: <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
но по-моему он тут не при чем.
Сайт на 2 языках, английский и немецкий.

   
 
 автор: LouD   (02.12.2007 в 12:17)   письмо автору
 
   для: LouD   (01.12.2007 в 21:17)
 

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

На хостинге стоит версия 4.1.20, MySQL-кодировка: UTF-8 Unicode (utf8)
Тут немецкий текст в базу записывается нормальным текстом (со всеми умляутами), но на сайт эти символы выводятся знаком "?"

Кодировку на хостинге (Сопоставление соединения с MySQL) менять пробовал: пишет или нормальный текст, или с ??
Куда копать? Как я понимаю, или в скрипте надо менять обработку этих символов, или при записи в базу чтобы они перекодировались "на лету", как у меня на тестовом..

Да, в самом первом "стартовом" скрипте с настройками я вставил строку
setlocale (LC_ALL, 'nl_NL');
но она ничем не помогла.

   
 
 автор: Trianon   (02.12.2007 в 14:15)   письмо автору
 
   для: LouD   (02.12.2007 в 12:17)
 

Для начала следует на локальной машине добиться хранения данных в кодировке UTF-8, а не как попало.
Потом снять работоспособный (читающийся в UTF-8-редакторе) дамп.
Потом проапгрейдить сервер до уровня хотя бы 4.1
Потом изменить локальный скрипт соедиения с БД, добавив в него настройку на нужную кодировку.
SET NAMES='utf8'
Потом создать БД, указав умалчиваемую кодировку utf8 и сопоставление utf8_unicode_ci
Потом залить дамп на обновленный сервер, предварительно прописав в начале дампа SET NAMES='utf8'
Все это потому, что сервера 4.0 и ниже работу с разными кодировками не поддерживают.
А сервера 4.1 и выше только с ними и работают.

   
 
 автор: LouD   (02.12.2007 в 16:21)   письмо автору
 
   для: Trianon   (02.12.2007 в 14:15)
 

Но если оставить в стороне локальную машину... Я не снимал с нее дамп, я копировал структуру таблицц, а данные заносил (пока на стадии отладки простым режимом вставки в phpMyAdmin на хостинге).

Скрипт коннекта к БД выглядит так:

    $db = mysql_connect($host, $name, $pass)
        or die("Ошибка подключения к серверу MySQL");

    mysql_select_db($dbname,$db)
        or die("Не могу установить соединение с базой данных!");
    
    mysql_query("SET NAMES='utf8'");

Я уже пробовал переконвертировать таблицу непосредственно в phpMyAdmin на хостинге:

ALTER TABLE `de_content` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;


После вставки через phpMyAdmin фрагмента текста в базе в числовые коды символы не переконвертируются.
При выводе контента скриптом - выводятся вопросами по-прежнему.

   
 
 автор: LouD   (02.12.2007 в 16:43)   письмо автору
 
   для: LouD   (02.12.2007 в 16:21)
 

да, и еще попытка: вставить текст с умляутами php-скриптом:
mysql_query("INSERT INTO de_content (id,page) VALUES(111,'Unser Verein wurde in Zusammenhang mit der Verst&#228;rkung der Gewalt in der Welt gegr&#252;ndet. Wir leben im XXI Jahrhundert und haben kein Recht, &#252;ber von entwickelten Menschlichkeit erreichten demokratischen und menschlichen Errungenschaften zu vergessen. Aber letzte Tendenzen in der Welt zwingen besonders zu beachten, dass gegenw&#228;rtige Zivilisation langsam zur Stufe mittelalterer Inquisition abrutscht.')");
жирным выделены символы с умляутами.

После вставки в базе содержится такая информация:
Unser Verein wurde in Zusammenhang mit der Verstarkung der Gewalt in der Welt gegrundet. Wir leben im XXI Jahrhundert und haben kein Recht, uber von entwickelten Menschlichkeit erreichten demokratischen und menschlichen Errungenschaften zu vergessen. Aber letzte Tendenzen in der Welt zwingen besonders zu beachten, dass gegenwartige Zivilisation langsam zur Stufe mittelalterer Inquisition abrutscht.

То есть произошла замена символов с умляутами на стандартные символы латиницы

   
 
 автор: LouD   (02.12.2007 в 20:48)   письмо автору
 
   для: LouD   (01.12.2007 в 21:17)
 

Всем спасибо, вопрос решен.

Если кратко - помогло шаманство с бубном в 4 местах:
кодировка самой БД, кодировка для сравнения в БД, кодировка отдаваемой страницы, настройка на utf8 при коннекте (SET NAMES='utf8').

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования