Доброго времени суток, залил сайт на хостинг и когда вывожу данные из базы, вместо русских символов мне выдает ????, то есть слово в базе "привет" - выведет ?????? . При этом кодировки все стоят правильно, как быть?
Настроить и проверить корректность работы в MySQL monitor, оставив пых-пых в покое. Только после этого разбираться с пых=пыхом, если там что-то по-прежнему будет неправильно работать.
Возможно, указанного шрифта нет в системе или он не поддерживает кириллицу.
Если он есть, то проблема в кодировке.
Проверьте кодировку столбца в БД, кодировку при подключении (SET NAMES), кодировку всех файлов, обрабатывающих эту строку (в том числе и выводящий скрипт) и кодировку страницы (<meta charset="utf-8>)
Alexis_D, какая кодировка в БД? Должно быть 'utf8_general_ci'. Кодировка файлов? Должно быть utf-8 (без BOM). Выводятся ли кириллические символы вне БД корректно (echo "Привет";). Как определяет кодировку браузер? В Firefox это Menu->More->Text Encoding->Unicode
Alexis_D, так вот же, latin1 показывает, а должно быть utf8, это не на странице, а в БД.
Есть доступ к PhpMyAdmin? Если там в стобцах таблицы стоят 'utf8_general_ci', то $connect->set_charset("utf8"); сразу после подключения должно решить проблему, если же там реально 'latin1_swedish_ci', то придется менять кодировку в БД, сделав бэкап.
Если есть возможность, можно сделать экспорт базы в sql файл, открыть его в notepad++ (или любом другом редакторе, поддерживающем смену кодировок), преобразовать кодировку в UT8 без BOM, заменить все latin1_swedish_ci на utf8_general_ci, сохранить и импортировать в новую БД с корректной кодировкой.
ukoHka, добавил $connect->set_charset("utf8");
он исправил и выводит - object(stdClass)#2 (8) { ["charset"]=> string(4) "utf8" ["collation"]=> string(15) "utf8_general_ci" ["dir"]=> string(0) "" ["min_length"]=> int(1) ["max_length"]=> int(3) ["number"]=> int(33) ["state"]=> int(1) ["comment"]=> string(13) "UTF-8 Unicode" }
но вопросики все равно есть, открыл файл базы в notepad++, там стояла кодировка utf8 без БОМ
Alexis_D, а кодировка в тексте файла какая? utf8_general_ci или latin1_swedish_ci? Там, где CREATE TABLE всякие. Не должно быть ни одного latin в тексте (кроме как в значениях полей, там может быть любой текст).
Все кодировки должны совпадать, иначе некоторые символы могу отображаться некорректно.
В настройках MySQL указывается кодировка для всего и вся по умолчанию, то есть если не указывать Collation при создании БД, при создании таблиц и столбцов. И если предварительно не настраивать MySQL, то устанавливается именно latin1.
То есть самый гарантированный способ, это сменить настройки по умолчанию в MySQL до создания БД. Но также сработает вариант указать явно кодировку при создании БД. Если просто сменить кодировку для уже имеющегося столбца, то все символы будут переконвертированы и останутся вопросительные знаки, которые и будут выводиться как вопросительные знаки.