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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Pavel8897
Отправлено: 15 Сентября, 2017 - 09:30:20
Post Id


Новичок


Покинул форум
Сообщений всего: 47
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




Доброго дня! Сделал вывод русского текста из таблицы phpmyadmin, но на выходе получились знаки вопроса. Подскажите, в чем может быть дело, или может как правильно подставить функция iconv?
PHP:
скопировать код в буфер обмена
  1. $_SESSION['id'] = $result['id'];
 
 Top
Vladimir Kheifets
Отправлено: 15 Сентября, 2017 - 10:14:14
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Pavel8897 пишет:
Доброго дня! Сделал вывод русского текста из таблицы phpmyadmin, но на выходе получились знаки вопроса. Подскажите, в чем может быть дело, или может как правильно подставить функция iconv?
PHP:
скопировать код в буфер обмена
  1. $_SESSION['id'] = $result['id'];


Добрый день, Павел! Судя по тому что, Вы открыли новую тему о том же, Вам не удалось найти решение.
Знаки вопроса вместо русского текста выдаются из-за того, что кодировка страницы UTF-8, а текст вероятно в windows-1251.
Вы можете либо поменять кодировку страницы (как см. тему "Проверка сессии и вывод имени") либо перекодировать текст в UTF-8
Для перкодировки попробуйте использовать функцию:
PHP:
скопировать код в буфер обмена
  1. function DicCodeToUTF($sp, $str){
  2.    $code=($sp=="ru")?"windows-1251":"iso-8859-1";
  3.    return mb_convert_encoding($str, "utf-8", $code);
  4. }

Возможно, что у Вас входная кодировка не "windows-1251".
Если не получится поменяйте на свою.
Удачи!
 
 Top
Pavel8897
Отправлено: 15 Сентября, 2017 - 11:29:39
Post Id


Новичок


Покинул форум
Сообщений всего: 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. Задать кодировку всей странице не получается, так как весь остальной текст начинает криво отображаться. Попробую с помощью функции! Спасибо!

(Отредактировано автором: 15 Сентября, 2017 - 12:42:37)

 
 Top
MouseZver
Отправлено: 15 Сентября, 2017 - 12:09:23
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Июнь 2017  
Откуда: php.ru


Помог: 1 раз(а)




пхп должен дружить лишь с одной кодировкой - UTF-8 no bom
все остальное дичь и говнокод
 
 Top
Pavel8897
Отправлено: 15 Сентября, 2017 - 12:16:33
Post Id


Новичок


Покинул форум
Сообщений всего: 47
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




MouseZver пишет:
пхп должен дружить лишь с одной кодировкой - UTF-8 no bom
все остальное дичь и говнокод

В ней все и находится.
А нужно в таком случае прописывать так: UTF-8-BOM в .htaccess или там просто можно UTF-8?
 
 Top
Vladimir Kheifets
Отправлено: 15 Сентября, 2017 - 14:00:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Pavel8897 пишет:

В ней все и находится.
А нужно в таком случае прописывать так: UTF-8-BOM в .htaccess или там просто можно UTF-8?


До этого Вы написали: "Да, все верно, текст в 1251, а на странице стоит UTF-8 без BOM."
Теперь пишите: "В ней все и находится." т.е. тексты тоже в UTF-8 или?
Проверить, в какой кодировке тексты, которые не правильно выводятся можно
поменяв кодировку страницы в браузере.

(Отредактировано автором: 15 Сентября, 2017 - 15:00:35)

 
 Top
LIME
Отправлено: 15 Сентября, 2017 - 22:49:19
Post Id


Активный участник


Покинул форум
Сообщений всего: 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_...
 
 Top
Vladimir Kheifets
Отправлено: 16 Сентября, 2017 - 07:59:56
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




LIME пишет:
Pavel8897....
короче - кодировка файлов и кодировка в браузере должны совпадать....

Доброе утро! Совершенно верно "кодировка файлов и кодировка в браузере должны совпадать", а она у Павла не совпадает...
Что необходимо сделать:
1. PHP-файлы сохранить в редакторе, в той кодировке, которая стоит на стронице.
2. Тексты, которые выбираются из базы данных, если они не правильно выводятся, перекодировать в туже кодировку.
Узнать в какой кодировке тексты можно с помощью функции mb_check_encoding
или переключая кодировку в браузере.
Всем хороших выходных!

(Отредактировано автором: 16 Сентября, 2017 - 08:00:42)

 
 Top
LIME
Отправлено: 16 Сентября, 2017 - 15:39:43
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Vladimir Kheifets пишет:
2. Тексты, которые выбираются из базы данных, если они не правильно выводятся, перекодировать в туже кодировку.
ни в коем случае
перечитать выше что я говорил о бд
(Добавление)
Vladimir Kheifets пишет:
mb_check_encoding
бывает ошибается
ниже в коментах в мануале бып пример безошибочного определения
но это нужно разве только при парсинге чужих ресурсов
короче сомнительные советы в очередной раз
имхо
 
 Top
Vladimir Kheifets
Отправлено: 18 Сентября, 2017 - 09:29:41
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 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
Простите, мы больше не будем...

(Отредактировано автором: 18 Сентября, 2017 - 09:42:24)

 
 Top
Мелкий Супермодератор
Отправлено: 18 Сентября, 2017 - 10:31:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




LIME пишет:
ниже в коментах в мануале бып пример безошибочного определения

Vladimir Kheifets пишет:
2. Замечал, mb_check_encoding, бывает ошибается.

Да потому что это не замечать надо, а слегка задуматься над тем, что же такое кодировка текста.

Вы программа и у вас есть 13 байт данных, которые надо показать пользователю. Как их показать? Какому байту надо рисовать какое графическое представление?
Та хрен его знает! В этих 13 байтах нет ни одного намёка на это. Байт \xD0 имеет смысл в огромном множестве кодировок и в большинстве из них этот смысл для человека будет разный. А в других кодировках этот байт вовсе не имеет графического отображения.

Программным кодом кодировку определить безошибочно нельзя. Потому что бинарное представление всех кодировок ложится в одно и то же самое множество байтов. Различить какой-нибудь windows-1251 и windows-1250 можно только зная что-нибудь об исходном тексте. Например, что в тексте 1251 наверняка будет больше байтов из диапазона \xC0-\xFF, т.к. в этом диапазоне вся кириллица и расположена, в отличии от 1250, который активно использует латинский алфавит из первых 7 бит кодировки идентичных ASCII.
Хотите точно знать в какой кодировке текст выглядит нормально - посмотрите его глазами в разных кодировках. А машине всё равно что рисовать.

PS: обе темы внимательно не читал. Потому что решение одно - разобраться, где в какой кодировке данные лежат, в каких запрашиваются, что отдаётся в заголовках и привести этот бардак в любому общему знаменателю.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB