Intereting Posts
Хорошие источники обучения для ООП-PHP, кто-нибудь? SQL-запрос для выбора сообщений, относящихся к нескольким категориям Есть ли библиотека PHP для XLSM (Excel с Macro) для разбора / редактирования? Сравнение строк PHP не будет похоже на кажущуюся идентичную строку Функциональный тест – служба Mock не сохраняется в сервисном контейнере Сохранение данных в базе данных в yii2 во время действия загрузки файлов Размер памяти исчерпан при попытке использовать MySQLi Использовать компонент Symfony 2 в проекте, отличном от Symfony? Требуется ли для Doctrine 2 использовать внешние ключи? Как префикс положительного числа с знаком плюса в PHP Как получить доступ к вложенным массивам из json_decode в PHP? функция внутри функции в php: ошибка: не удается переопределить Простая генерация CRUD Чтение ошибок и имен файлов из файла log.txt Попытка извлечь 5 символов из столбца при добавлении записи mysql через php

PHP: проблемы, преобразующие символ «» из ISO-8859-1 в UTF-8

У меня возникли проблемы с использованием PHP для преобразования содержимого базы данных ISO-8859-1 в UTF-8. Я тестирую следующий код:

// Connect to a latin1 charset database // and retrieve "Georgia O'Keeffe", which contains a "'" character $connection = mysql_connect('*****', '*****', '*****'); mysql_select_db('*****', $connection); mysql_set_charset('latin1', $connection); $result = mysql_query('SELECT notes FROM categories WHERE id = 16', $connection); $latin1Str = mysql_result($result, 0); $latin1Str = substr($latin1Str, strpos($latin1Str, 'Georgia'), 16); // Try to convert it to UTF-8 $utf8Str = iconv('ISO-8859-1', 'UTF-8', $latin1Str); // Output both var_dump($latin1Str); var_dump($utf8Str); 

Когда я запускаю это в исходном представлении Firefox, убедитесь, что параметр кодировки Firefox установлен на «Western (ISO-8859-1)», я получаю следующее:

ASD

Все идет нормально. Первый вывод содержит эту странную цитату, и я вижу ее правильно, потому что она в ISO-8859-1, и Firefox.

После того, как я изменил настройку Firefox на «UTF-8», он выглядит так:

ASD

Куда ушла цитата? Не iconv() ли iconv() преобразовать его в UTF-8?

U + 2019 RIGHT SINGLE QUOTATION MARK не является символом в ISO-8859-1. Это символ в windows-1252 , как 0x92. Фактический символ ISO-8859-1 0x92 – это редко используемый символ управления C1, называемый «Частное использование 2».

Очень часто неправильно использовать текстовые данные Windows-1252 с ярлыком кодировки ISO-8859-1. Многие веб-браузеры и почтовые клиенты обрабатывают кодировку MIME ISO-8859-1 в качестве символов Windows-1252 для того, чтобы учесть такую ​​ошибочную маркировку, но это не стандартное поведение, и следует соблюдать осторожность, чтобы избежать генерации этих символов в ISO-8859-1 помеченный контент.

Похоже, это то, что здесь происходит. Измените «ISO-8859-1» на «windows-1252».

это решит вашу проблему, предположив, что ваша charset заголовка страницы – utf-8:

 // Opens a connection to a MySQL server $connection = mysql_connect ($server, $username, $password); $charset = mysql_client_encoding($connection); $flagChange = mysql_set_charset('utf8', $connection); echo "The character set is: $charset</br>mysql_set_charset result:$flagChange</br>";