Все прошло идеально с моим подключением к базе данных. Информация в моей базе данных содержит такие символы, как "á,é,í"
Обратите внимание на мелкие детали здесь:
С одной стороны вы пишете
Все прошло идеально с моим подключением к базе данных.
А на другом пишешь:
Информация в моей базе данных содержит такие символы, как "á,é,í"
Итак, я пытаюсь показать здесь, что соединение с базой данных не является базой данных:
[PHP code] <--- database connection ---> [database server]-+-[data]
Соединение с базой данных — это согласование потока данных между сервером и вашей программой.
Кодирование — это метаинформация, и где бы вы ни передавали данные (строки), эта метаинформация о кодировании либо верна, либо неверна.
Когда это неправильно, это может привести к неожиданным результатам. Результаты, которые вы испытываете:
Богот. Столица Колумбии.
(вместо "Богота. Столица Колумбии".)
По своему опыту могу сказать вам следующее об этой более широкой картине:
- То, что браузер дает вам символ �, является признаком того, что он поймал двоичную последовательность данных, которая не может сделать из нее допустимую кодовую точку (скажем, букву) и красиво отобразить эту букву. Вместо этого он отображает вопросительный знак в ромбе, чтобы сигнализировать о проблеме.
- Это признак того, что кодировка Unicode ожидалась, а не дана.
- По опыту вы подаете однобайтовый набор символов как UTF-8.
Тому может быть несколько причин.
Итак, давайте вспомним, что я только что написал выше о метаданных рядом с самими данными, и рассмотрим подключение к базе данных:
[PHP code] <--- database connection ---> [database server]-+-[data]
И, прежде всего, хорошие новости: подключение к базе данных позволяет вам, как программисту PHP-кода, сообщать базе данных, какую кодировку вы ожидаете.
Затем сервер базы данных просматривает данные, которые у него есть, когда вы запрашиваете у него данные, и кодирует данные в запрошенной вами кодировке. Разве это не мило?
Поэтому все, что вам нужно сделать, это сообщить серверу базы данных, какую кодировку символов вы ожидаете.
Для этого вам нужно знать, с какой кодировкой символов вы будете обслуживать ответ. В настоящее время это чаще всего UTF-8 в Интернете. Поэтому скажите серверу базы данных, что вам нужна UTF-8. И все должно быть хорошо:
Редактировать: И, увидев ваши комментарии: Нет, вы добавили туда вызовы utf8_encode
без необходимости. База данных может предоставить вам уже правильно закодированные данные (и всегда правильные). utf8_encode
работает только для строк в кодировке Latin-1, он не будет работать, если у вас есть данные, отличные от базы данных. Не делайте это слишком конкретным, вместо этого просто используйте правильные параметры для подключения к базе данных, и у вас будет гораздо меньше поводов для беспокойства, потому что вы знаете, какую кодировку вы запросили.
Важный принцип: по возможности просите то, что хотите, вместо того, чтобы создавать это самостоятельно.
person
hakre
schedule
30.03.2015
header("Content-Type: application/xml; charset=utf-8");
для внешнего интерфейса - person s.d.a.p.e   schedule 30.03.2015CHARACTER SET latin1
вместоutf8
. - person Rick James   schedule 30.03.2015utf8_encode utf8_decode
в файле xml, возможно, это поможет, например,echo utf8_decode(file_get_contents(path));
и БД, возможно, GOOGLE: MYSQL SET NAMES - person s.d.a.p.e   schedule 30.03.2015