Тайский символ отображается в phpmyadmin правильно, но не во внешнем интерфейсе

Последние пару часов я очень старался, но не нашел решения. почему это происходит.... У меня есть таблица с collation=utf8_general_ci, и для ее сопоставления столбца/поля также установлено значение utf8_general_ci. я могу правильно видеть тайские данные из phpmyadmin. но когда я извлекаю данные этой таблицы и показываю с помощью php-кода, он показывает ???????

щелкните, чтобы просмотреть страницу.

на этой странице я написал одно тайское слово напрямую, которое отображается правильно, но то же слово/текст, когда я извлекаю из базы данных и отображаю его, показывает ???

я использую

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

в настоящее время и когда я пробовал с

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

я обнаружил, что Direct и из базы данных текст/слово отображаются как ?????


person user1911703    schedule 05.03.2014    source источник


Ответы (2)


Возможно, само ваше соединение с MySQL не использует utf8. Из руководства MySQL:

SET NAMES indicates what character set the client will use to send SQL statements 
to the server. Thus, SET NAMES 'cp1251' tells the server, “future incoming 
messages from this client are in character set cp1251.” It also specifies the 
character set that the server should use for sending results back to the client. 
(For example, it indicates what character set to use for column values if you use 
a SELECT statement.)

В зависимости от того, как вы подключаетесь к базе данных (mysql_connect/mysqli_connect или PDO), шаги немного отличаются. Если вы используете mysql_connect(); или mysqli_connect;, вам нужно будет запустить mysql_query("SET NAMES utf8");. Теоретически вы можете использовать те же шаги при использовании PHP PDO, но в качестве альтернативы вы можете установить команду init во время создания объекта PDO. Вот пример из моего класса взаимодействия с базой данных.

$dsn = 'mysql:host='.$database_detail['dbhost'].';dbname='.$database_detail['dbname'];
$this->dbh = new PDO($dsn, $database_detail['dbuser'],
    $database_detail['dbpass'], array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => FALSE,
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
));
person crashmaxed    schedule 05.03.2014

Иногда у меня возникают проблемы с испанским языком, и хотя я установил тип содержимого в html, он все равно отображает неправильный тип кодировки.

Что работает для меня, так это если я «сохраню php-документ» с правильным форматированием, а затем это решит проблему.

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

Поэтому я бы сделал следующее:

Напишите тайское слово в HTML и заставьте его правильно отображаться. Попробуйте сделать это, сохранив документ в разных вариантах кодировки. Обычно это опция в диалоговом окне сохранения, и как только она появится, попробуйте получить ее из базы данных.

Конечно, вы можете заставить Apache обслуживать документы в нужной вам кодировке, но это предполагает, что у вас есть доступ к этим настройкам.

Надеюсь, это поможет.

person Cameron    schedule 05.03.2014