Неправильная кодировка из PHP?

1) У меня есть таблица tbl_Data в базе данных, которая имеет столбец name с методом сравнения текста (?), Установленным в utf8_polish_ci . Работает как прелесть, когда я просматриваю tbl_Data через phpMyAdmin.

2) В моем html-коде у меня есть:

 <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> 

так кажется, что я отправляю правильные заголовки кодировки для браузера …

3) Мой PDO dsn содержит ;charset=UTF-8 , затем из руководства php.

4) В моем php-коде я использую:

 foreach(parent::query('SELECT ID,PLName,LatinName from tbl_Data') as $row) { $result = $result." <tr> <td>".utf8_encode($row['PLName'])."</td> </tr> "; } 

Имея все это, я все еще получаю символы «мусор» (= ? ) Вместо правильных латинских букв, хотя некоторые из них хорошо отображаются (phpMyAdmin показывает все правильно). Что мне здесь не хватает? Пожалуйста, совет, ребята!

Мой MySQL Engine – это InnoDB , webserver: nginx с fpm, если он является revelant …

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

Неправильно. <meta> – это не HTTP-заголовок, а HTML-тег, нестандартный. Таким образом, ваш код по-прежнему не имеет надлежащего заголовка.

 header('Content-Type: text/html; charset=utf-8'); 

Мой PDO dsn содержит: charset = UTF-8, затем из руководства php.

если ваша версия PHP меньше 5.3.6, она тоже не будет работать. вместо этого используйте SET NAMES utf8

Нет смысла использовать utf8_encode() если ваш текст уже закодирован в кодировке UTF-8.

Возможной проблемой может быть ваша версия PHP. Элемент ;charset=UTF-8 вашего DSN поддерживается только версией PHP> = 5.3.6. До 5.3.6 этот элемент молча игнорировался (вместо предупреждения). Дополнительная информация и обходной путь для этого доступны в документах: http://php.net/manual/en/ref.pdo-mysql.connection.php

Charset UTF-8 хорош (в вашем html): P

Попробуйте это. (Используйте новую, экспериментальную таблицу для этого, чтобы проверить это, потому что я понятия не имею, если ваш PHP-скрипт очищает записи $ _POST, например, или вообще что-то делает).

  1. создать столбец, установленный в utf8_bin (не utf_ci_polish) с именем "polish_title"

  2. Прежде чем PHP передает (ввод текста, полирует) данные в mysql INSERT (or update) скрывает те, у кого есть эта (встроенная PHP функция)

    $ polish_input = htmlspecialchars ($ input_polish_data);

    INSERT INTO table_name (polish_title) значения ('$ polish_input');

Вы увидите странные данные в таблице mysql (через phpmyadmin), когда знаки пользы являются частью вашего ввода, что является нормальным (или blobed), но хорошим (польский нативный) на вашем сайте, когда вы получаете данные mysql;)

Если это сработает, ВСЕ ваши столбцы mqsql (text) должны быть изменены на utf8_bin. А для легкого ввода на себя вы можете создать функцию, которая может «очистить» все входы $ _POST на вашем веб-сайте до того, как эти входы войдут в базу данных mysql.

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

Изменить (вход пользователя thx to Common Sense)

И да, включите это как ДОЛЖНО также в свой заголовок

 header('Content-Type: text/html; charset=utf-8'); 

Я не мог комментировать ваше сообщение ….. поэтому я предлагаю здесь ~ _ ~
Отсюда он сказал utf8_encode – кодирует строку ISO-8859-1 для UTF-8
поэтому, мой вопрос: является ли ваш выход ISO-8859-1?
Возможно, вы можете создать обычную английскую тестовую запись и повторить попытку.

В своем HTML-коде попробуйте:

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