Как отобразить текст в UTF8 из mysql / phpmyadmin?

14703
Utf8

У меня есть база данных с несколькими таблицами. База данных и таблица и каждая строка таблицы установлены в utf8_romanian_ci.

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

Например: если я введу MaÂehxв таблицу, у меня есть толькоM

Данные из таблицы импортируются из csvфайла. В Excel диакритические знаки выглядят нормально.

Как я могу решить это?

5
Привет UTF8, я вижу, вы только что начали на сайте, поэтому, пожалуйста, не забудьте принять ответ, если это решило проблему. Спасибо! zx81 10 лет назад 0

1 ответ на вопрос

4
zx81

UTF-8 - непостоянная хозяйка. Для типичного веб-приложения вы должны установить UTF-8 на многих уровнях. Даже если код phpMyAdmin хорошо работает с UTF8, он не работает в вакууме: важна конфигурация сервера. Так же как и база данных, и источник данных для базы данных. Давайте суммируем области потенциального трения в общем приложении с особым акцентом на областях, представляющих интерес для phpMyAdmin.

А. Источник данных

Когда данные импортируются в базу данных, например из текстового файла, они должны иметь правильную кодировку. Диакритические знаки могут отображаться в Excel, но кодировка может быть любой. Таким образом, вы можете иметь CSV-файл, который выглядит правильно, но не импортируется должным образом. Вы можете проверить и преобразовать кодировку вашего CSV-файла в текстовом редакторе, таком как EditPad, или в IDE, например, Komodo. В Notepad ++, который есть у многих людей, вы можете выбрать «Кодировка», чтобы увидеть текущую кодировку, а также выбрать «Кодировка / Преобразовать в UTF8», если это необходимо.

Б. В вашей базе данных. Набор символов таблицы и параметры сортировки должны быть установлены в UTF-8. Похоже, вы, возможно, уже сделали это.

Если нет, вам нужно что-то вроде:

ALTER TABLE MyTable DEFAULT CHARACTER SET utf8, COLLATE utf8_general_ci; 

Это общая настройка, но ваш румынский сборник тоже должен работать.

C. Подключение к базе данных. Вам нужно что-то вроде:

$connectDSN = "mysql:host={$db_host};dbname={$db_name};charset=UTF-8"; 

PhpMyAdmin должен подключиться правильно. На целевой странице вы должны увидеть

Server charset: UTF-8 Unicode (utf8) 

Если нет, продолжайте читать.

D. php должен обрабатывать UTF8. В php.ini вам нужно что-то вроде:

default_charset = UTF-8  mbstring.language = Neutral  mbstring.internal_encoding = UTF-8  mbstring.encoding_translation = On  mbstring.http_input = auto  mbstring.http_output = UTF-8  mbstring.detect_order = auto  mbstring.substitute_character = “0xFFFD”  

Вы можете проверить настройки вашего сервера с помощью phpinfo (). На общедоступном хосте у вас обычно нет доступа к php.ini, и вы должны изменить настройки непосредственно в скрипте. Кстати, не забывайте использовать функции mb.

E. настройка заголовка

Чтобы браузер знал, что он получает, он должен получить заголовок, такой как следующий, отправленный php:

<?php header('Content-type: text/html; charset=UTF-8'); ?> 

Это не должно быть проблемой с phpMyAdmin. В Firefox, используя расширение для веб-разработчиков, вы можете перейти в Информация / Просмотр информации о странице. На вкладке Общие это покажет вам кодировку.

F. HTML метатег

Это рекомендуется, чтобы помочь браузеру.

<meta charset="UTF-8"> 

Это не должно быть проблемой с phpMyAdmin. Снова проверьте в браузере, какую кодировку он видит.

Г. Шрифт

Браузер может не иметь шрифта для отображения некоторых символов, хотя современные версии довольно хороши в отношении резервных шрифтов. Это, вероятно, не проблема в вашем случае.

Так что есть много мест, где все может пойти не так.

Надеюсь, что это поможет вам определить проблему!

Когда все выстраивается, тогда магия ... Вы получаете UTF8 везде.

И не забывайте:

ಬಾ ಇಲ್ಲಿ ಸಂಭವಿಸು ಇಂದೆನ್ನ ಹೃದಯದಲಿ

ನಿತ್ಯವೂ ಅವತರಿಪ ಸತ್ಯಾವತಾರ

Я знаю, что это старый ответ, `mysqli_set_charset ($ this -> link, 'utf8');` исправил мою проблему, это был мой 'разрыв в цепочке', если хотите :-) Edward 8 лет назад 0