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, например, или вообще что-то делает).
создать столбец, установленный в utf8_bin
(не utf_ci_polish) с именем "polish_title"
Прежде чем 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">