Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Неверная кодировка текста - PHP
Покинул форум
Сообщений всего: 47
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
Доброго дня! Сделал вывод русского текста из таблицы phpmyadmin, но на выходе получились знаки вопроса. Подскажите, в чем может быть дело, или может как правильно подставить функция iconv?
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
Pavel8897 пишет:
Доброго дня! Сделал вывод русского текста из таблицы phpmyadmin, но на выходе получились знаки вопроса. Подскажите, в чем может быть дело, или может как правильно подставить функция iconv?
Добрый день, Павел! Судя по тому что, Вы открыли новую тему о том же, Вам не удалось найти решение.
Знаки вопроса вместо русского текста выдаются из-за того, что кодировка страницы UTF-8, а текст вероятно в windows-1251.
Вы можете либо поменять кодировку страницы (как см. тему "Проверка сессии и вывод имени") либо перекодировать текст в UTF-8
Для перкодировки попробуйте использовать функцию:
Возможно, что у Вас входная кодировка не "windows-1251".
Если не получится поменяйте на свою.
Удачи!
Pavel8897
Отправлено: 15 Сентября, 2017 - 11:29:39
Новичок
Покинул форум
Сообщений всего: 47
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
Vladimir Kheifets пишет:
Добрый день, Павел! Судя по тому что, Вы открыли новую тему о том же, Вам не удалось найти решение.
Знаки вопроса вместо русского текста выдаются из-за того, что кодировка страницы UTF-8, а текст вероятно в windows-1251.
Вы можете либо поменять кодировку страницы (как см. тему "Проверка сессии и вывод имени") либо перекодировать текст в UTF-8
Для перкодировки попробуйте использовать функцию:
PHP:
скопировать код в буфер обмена
function DicCodeToUTF($sp, $str){
$code=($sp=="ru")?"windows-1251":"iso-8859-1";
return mb_convert_encoding($str, "utf-8", $code);
}
Возможно, что у Вас входная кодировка не "windows-1251".
Если не получится поменяйте на свою.
Удачи!
Решил просто закинуть на все форумы которые знаю, так как решение пока не могу найти))
Да, все верно, текст в 1251, а на странице стоит UTF-8 без BOM. Задать кодировку всей странице не получается, так как весь остальной текст начинает криво отображаться. Попробую с помощью функции! Спасибо!
Покинул форум
Сообщений всего: 58
Дата рег-ции: Июнь 2017 Откуда: php.ru
Помог: 1 раз(а)
пхп должен дружить лишь с одной кодировкой - UTF-8 no bom
все остальное дичь и говнокод
Pavel8897
Отправлено: 15 Сентября, 2017 - 12:16:33
Новичок
Покинул форум
Сообщений всего: 47
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
MouseZver пишет:
пхп должен дружить лишь с одной кодировкой - UTF-8 no bom
все остальное дичь и говнокод
В ней все и находится.
А нужно в таком случае прописывать так: UTF-8-BOM в .htaccess или там просто можно UTF-8?
Vladimir Kheifets
Отправлено: 15 Сентября, 2017 - 14:00:28
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
Pavel8897 пишет:
В ней все и находится.
А нужно в таком случае прописывать так: UTF-8-BOM в .htaccess или там просто можно UTF-8?
До этого Вы написали: "Да, все верно, текст в 1251, а на странице стоит UTF-8 без BOM."
Теперь пишите: "В ней все и находится." т.е. тексты тоже в UTF-8 или?
Проверить, в какой кодировке тексты, которые не правильно выводятся можно
поменяв кодировку страницы в браузере.
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Pavel8897 все забудь
короче - кодировка файлов и кодировка в браузере должны совпадать
как приказать браузеру брать нужную кодировку выше скзали
и кстати кодировка указанная в заголовках приоритетнее кодировки в метатеге
в бд кодировка может быть любой главное после подключения указать правильно кодировку клиента
как это делать гугли или спрашивай
например http://php.net/manual/ru/functio...-set-charset.php
----
никакого iconv если это не сильно надо по задаче... это от дьявола
но при этом надо учесть что js(ajax) работает только в utf8
если бэкенд в другой кодировке получай траблы с iconv
----
MouseZver пишет:
пхп должен дружить лишь с одной кодировкой - UTF-8 no bom
но как раз не дружит))
куча mb_... и других костылей
Pavel8897 пишет:
а на странице стоит UTF-8 без BOM.
лучше всего конечно все перевести в utf без bom
однако же bom мешает только тем что оправляет байты в тело ответа до заголовков
решает либо удаление bom либо буферизация вывода на уровне вебсервера или семейство буферирирующих ф-ций ob_...
Vladimir Kheifets
Отправлено: 16 Сентября, 2017 - 07:59:56
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
LIME пишет:
Pavel8897....
короче - кодировка файлов и кодировка в браузере должны совпадать....
Доброе утро! Совершенно верно "кодировка файлов и кодировка в браузере должны совпадать", а она у Павла не совпадает...
Что необходимо сделать:
1. PHP-файлы сохранить в редакторе, в той кодировке, которая стоит на стронице.
2. Тексты, которые выбираются из базы данных, если они не правильно выводятся, перекодировать в туже кодировку.
Узнать в какой кодировке тексты можно с помощью функции mb_check_encoding
или переключая кодировку в браузере.
Всем хороших выходных!
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Vladimir Kheifets пишет:
2. Тексты, которые выбираются из базы данных, если они не правильно выводятся, перекодировать в туже кодировку.
ни в коем случае
перечитать выше что я говорил о бд (Добавление)
Vladimir Kheifets пишет:
mb_check_encoding
бывает ошибается
ниже в коментах в мануале бып пример безошибочного определения
но это нужно разве только при парсинге чужих ресурсов
короче сомнительные советы в очередной раз
имхо
Vladimir Kheifets
Отправлено: 18 Сентября, 2017 - 09:29:41
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
LIME пишет:
Vladimir Kheifets пишет:
2. Тексты, которые выбираются из базы данных, если они не правильно выводятся, перекодировать в туже кодировку.
ни в коем случае
перечитать выше что я говорил о бд (Добавление)
Vladimir Kheifets пишет:
mb_check_encoding
бывает ошибается
ниже в коментах в мануале бып пример безошибочного определения
но это нужно разве только при парсинге чужих ресурсов
короче сомнительные советы в очередной раз
имхо
Уважаемый коллега!
Вы написали:
Цитата:
ни в коем случае перечитать выше что я говорил о бд
Перечитал:
Цитата:
в бд кодировка может быть любой главное после подключения указать правильно кодировку клиента
как это делать гугли или спрашивай
например http://php.net/manual/ru/functio...-set-charset.php
Этот совет уже был и Павел ответил, что не помогло.
2. Замечал, mb_check_encoding, бывает ошибается.
Не плохо, что Вы вспомнили про парсинг чужих ресурсов.
При работе с GDS часто возникают проблемы с кодировкой данных.
Бывает, что проекты и БД достаются по "наследству"...
и иногда, помогает, mb_convert_encoding
Простите, мы больше не будем...
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
LIME пишет:
ниже в коментах в мануале бып пример безошибочного определения
Vladimir Kheifets пишет:
2. Замечал, mb_check_encoding, бывает ошибается.
Да потому что это не замечать надо, а слегка задуматься над тем, что же такое кодировка текста.
Вы программа и у вас есть 13 байт данных, которые надо показать пользователю. Как их показать? Какому байту надо рисовать какое графическое представление?
Та хрен его знает! В этих 13 байтах нет ни одного намёка на это. Байт \xD0 имеет смысл в огромном множестве кодировок и в большинстве из них этот смысл для человека будет разный. А в других кодировках этот байт вовсе не имеет графического отображения.
Программным кодом кодировку определить безошибочно нельзя. Потому что бинарное представление всех кодировок ложится в одно и то же самое множество байтов. Различить какой-нибудь windows-1251 и windows-1250 можно только зная что-нибудь об исходном тексте. Например, что в тексте 1251 наверняка будет больше байтов из диапазона \xC0-\xFF, т.к. в этом диапазоне вся кириллица и расположена, в отличии от 1250, который активно использует латинский алфавит из первых 7 бит кодировки идентичных ASCII.
Хотите точно знать в какой кодировке текст выглядит нормально - посмотрите его глазами в разных кодировках. А машине всё равно что рисовать.
PS: обе темы внимательно не читал. Потому что решение одно - разобраться, где в какой кодировке данные лежат, в каких запрашиваются, что отдаётся в заголовках и привести этот бардак в любому общему знаменателю.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.