Как декодировать текст MySQL с помощью PHP? - PullRequest
0 голосов
/ 16 мая 2019

Как в этом примере я могу кодировать текст из MySQL?

Вот так выглядит текст в MySQL, используя utf8mb4_unicode_ci: $ text = 'Wiesław';

Я уже пробовал:

header("Content-Type: text/html; charset=ISO-8859-1");

echo htmlentities($text);
echo '</br>';
echo html_entity_decode($text);
echo '</br>';
echo htmlspecialchars_decode($text);
echo '</br>';
echo htmlspecialchars_decode($text, ENT_NOQUOTES);
echo '</br>';
echo utf8_encode($text);
echo '</br>';
echo utf8_decode($text);
echo '</br>';
echo mb_convert_encoding($text, 'ISO-8859-1', 'UTF-8');
echo '</br>';
echo iconv('UTF-8', 'ISO-8859-1', $text);
echo '</br>';
echo mb_convert_encoding($text, 'UTF-8', 'ISO-8859-1');

Результаты:

Wies³aw
Wies³aw
Wies³aw
Wies³aw
Wies³aw
Wies?aw
Wies?aw

Wies³aw

Expectation:

Веслав

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Grrr .. Не используйте ни одну из этих функций. Вместо этого настройте MySQL правильно.

Хорошо: utf8mb4_unicode_ci - Это "Сортировка"; это подразумевает CHARACTER SET utf8mb4.

  • В клиенте должно быть UTF-8 символов. (Очевидно, вы делаете, так как у вас есть сток-л).
  • Скажите MySQL, что клиент использует utf8mb4. Лучше всего делать это при установлении соединения. PHP имеет mysqli и PDO. Детали для каждого: http://mysql.rjweb.org/doc.php/charcoll#php
  • Объявите столбцы (и, возможно, таблицу и базу данных) равными CHARACTER SET utf8mb4. Давайте посмотрим SHOW CREATE TABLE, чтобы увидеть, все ли в порядке.

Если после этого вы получите

Wiesław  -- Mojibake
Wies?aw   -- question mark
Wies      -- truncation
Wies�aw   -- black diamond

Затем перейдите к Проблемы с символами UTF-8; я вижу не то, что хранил для дальнейших советов и отладки.

Гекс должен быть 57 69 65 73 C582 61 77.
Если вы получите 57 69 65 73 C385 E2809A 61 77, то у вас есть «двойное кодирование».

0 голосов
/ 16 мая 2019

Если ваш текст идет в формате HTML, должна работать следующая команда:

mb_convert_encoding($text, 'HTML-ENTITIES', 'UTF-8')); 

OR

mb_convert_encoding($html, 'HTML-ENTITIES', 'ISO-8859-1'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...