Неправильно отображается UTF-8 из SSI.php

Автор Frost, 23 марта 2009, 13:51:03

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

roga_i_kopita

Цитата: Mr. Anviss от 28 апреля 2010, 09:50:15
Для roga_i_kopita
Это происходит потому что веб сервер отдает по умолчанию в кодировке windows-1251
Для устранения данной проблемы необходимо в файле .htaccess (если такового нет - создать и положить в папку с самопальным скриптом) прописать: AddDefaultCharset UTF-8 и будет тебе счастье.

Цитата: Mr. Anviss от 28 апреля 2010, 09:50:15
Ну это правда если хостинг разрешает это делать.

Конечно разрешает! Я сам себе хостинг! На VDS сижу.  :coolsmiley:

В общем закинул этот файл с таким содержимым в корень форума. Также добавил директиву и в существующий .htaccess в корне сайта Joomla. К сожалению не помогло. Так и выдаёт знаки вопросов вместо названий разделов и тем. Странно, что "от" АВТОР и "дату" отдаёт нормально, по-русски. И с директивой AddDefaultCharset UTF-8 и без неё.

Цитата: Mr. Anviss от 28 апреля 2010, 09:50:15
Да кстати, в iconv параметр CP1251 не правильный. По правилам пишут windows-1251

По правильному обозначению кодировки обратился к стандартизатору ИАНА (IANA) (__http://www.iana.org/assignments/character-sets__)
Там действительно кодировка CP1251 ни в каких случаях дажен не упоминается. Указана только windows-1251, при том указано на отсутствие синонимов к ней. Правда свежесть опубликованного перечня наборов символов - last updated 2007-05-14. Может уже изменилось чего?...  :-\
В тоже время на той же Википедии вскользь упоминается, что CP1251 всё-таки является синонимом windows-1251 (__http://ru.wikipedia.org/wiki/CP-1251__).
Получается, что CP1251- нестандартный (неформальный) синоним windows-1251, который везде втихаря используется и нормально обрабатывается.  laugh

Цитата: Mr. Anviss от 28 апреля 2010, 09:50:15
Вот блин забыл сказать: ты не то куришь :)

Да, тут ты, уважаемый, прав. Женщинами надо заниматься по ночам, а не всякую хрень вкуривать и в кодировках ковыряться.  ;D
Но проблема так и не решена. Опускаются руки. ТОЛЬКО РУКИ! Пошёл к женщине, можт вдохновит.

digger®

Цитата: Mr. Anviss от 28 апреля 2010, 20:27:01
я читал вот про эти:
[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
Этот вообще никак не связано с обсуждаемым вопросом.

Цитировать
а вообще если тебе охота "побоксировать" - то иди ты лесом... я достаточно ясно выразился?
Аргументы закончились? Обделался, так и скажи вместо перехода на оскорбления.

Mr. Anviss

Свои аргументы я высказал на 3 страницы этой темы.
Что тебе здесь не понятно?
http://www.simplemachines.ru/index.php?topic=6541.msg71739#msg71739
а если тебе так сильно хочется научить меня, а не выставить здесь себя то номер ICQ есть в моем профиле. Вот так вот. И где же оскорбления твоей великой персоны с моей стороны?

digger®

Цитата: Mr. Anviss от 28 апреля 2010, 20:36:07
Свои аргументы я высказал на 3 страницы этой темы.
Что тебе здесь не понятно?
http://www.simplemachines.ru/index.php?topic=6541.msg71739#msg71739

Хочу увидеть ПРАВИЛО, согласно которому в аргументах  iconv использовать CP1251 не правильно, а windows-1251 правильно.

Цитироватьа если тебе так сильно хочется научить меня
Тебя учить, похоже, уже поздно. Я хочу чтобы пользователи форума понимали, что то что они тут читают, вовсе не является истиной в последней инстанции.

digger®

Цитата: roga_i_kopita от 28 апреля 2010, 20:30:19
В общем закинул этот файл с таким содержимым в корень форума. Также добавил директиву и в существующий .htaccess в корне сайта Joomla. К сожалению не помогло. Так и выдаёт знаки вопросов вместо названий разделов и тем. Странно, что "от" АВТОР и "дату" отдаёт нормально, по-русски. И с директивой AddDefaultCharset UTF-8 и без неё.

Возможно поможет выставление правильной кодировки соединения с БД в SSI.php. По моему, уже обсуждалась такая проблема.
Если свой сервер и все в utf8, то можно в настройках mysql задать кодировку соединения по умолчанию.

Mr. Anviss

меня учить не поздно, а тебе просто хотелось выпендриться. почитал на счет windows-1251 и cp1251 - возможно я погарячился. они синонимы.

roga_i_kopita

Цитата: digger от 28 апреля 2010, 20:49:26
Возможно поможет выставление правильной кодировки соединения с БД в SSI.php. По моему, уже обсуждалась такая проблема.
Если свой сервер и все в utf8, то можно в настройках mysql задать кодировку соединения по умолчанию.

character set client   utf8
(Глобальное значение)   cp1251

character set connection   utf8
(Глобальное значение)   cp1251

character set database   cp1251
character set filesystem   binary
character set results   utf8
(Глобальное значение)   cp1251

character set server   cp1251
character set system   utf8
character sets dir   /usr/share/mysql/charsets/
collation connection   utf8_unicode_ci
(Глобальное значение)   cp1251_general_ci

collation database   cp1251_general_ci
collation server   cp1251_general_ci

Это мои серверные переменные и настройки, которые выведены из phpMyAdmin.
Несовпадение некоторых значений с глобальными меня сильно смущает.
Правильно ли я понимаю, что испытываю указанную ранее проблему именно из-за таких значений?
И правильно ли я предполагаю, что для исправления всего этого дела мне также придётся перекодировать все мои базы (15 штук) сначала в latin1 (чтобы "снять маску кодировки с битов данных") а затем, принудительно указав, в какой кодировке буду запихивать данные обратно в базу, снова всё заливать в UTF-8?
ЦитироватьНадобно сделать:
mysqldump –default-character-set=latin1 > file.sql
Теперь в файле лежат байтики «как было в БД», то бишь правильно.
Создаем базу с utf8 (или 1251), в file.sql добавляем SET NAMES cp1251 (говорим, что кормить щас будем 1251 данные), везде где создаются таблицы latin1 меняем на cp1251 (если база в utf8, то на utf8). Запускаем, получаем правильную базу (если приконнектиться НЕ как latin1, конечно).
Далее в /etc/my.cnf:
[mysqld]
init-connect='SET NAMES cp1251′ (либо при каждом коннекте говорить то же самое ручками).
и все будет работать замечательно, проверено и для utf8 тоже.

Начитался в инете и на форумах всего, теперь каша в голове.
Вообще много всего всплывает из-за мелких каких-то неприятностей. Чем дальше в лес, тем толще партизаны.

Что получается? Даже если я создаю в phpMyAdmin пустую базу со сравнением utf8_general_ci и делаю к ней запросы без явного указания кодировки, то все данные записываются в неё всё равно в какой-то иной кодировке? Которая задана глобальными переменными? Типа у меня character set database  cp1251, значит и все данные в каждой новой базе всё равно в cp1251, хоть и указываю другое сравнение?

А какая зависимость тогда между сайтом, файлы которого в utf-8, форумом в utf-8, базами в utf8_general_ci и установкой соединения с каждой базой (character set connection - utf8, (Глобальное значение) - cp1251)?

Если возможно более-менее коротко и доходчиво объяснить, будте добры! Новичкам на форуме понимание этих вещей, наверное, очень бы помогло. Занесли бы в ФАК потом. А?  idiot

digger®

Цитировать
Если возможно более-менее коротко и доходчиво объяснить, будте добры! Новичкам на форуме понимание этих вещей, наверное, очень бы помогло. Занесли бы в ФАК потом. А?  idiot

в my.cnf в секцию [mysqld]
добавьте (или замените, если там эти строки с другими кодировками)

default-character-set=utf8
init_connect='SET NAMES utf8'

и перезапустите mysql

Mavn

кстати говоря вполне возможно что в SSI.php не выставлена глобальная переменная указывающая кодировку как результат данные отдаются не так как нужно. Уже кстати была похожая проблема год или два назад и решилась дописыванием в глобал переменной.

и господа прекращайте срачь. хотите выяснить истину то хотя бы нормальным тоном это делайте!!
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

roga_i_kopita

Цитата: digger от 28 апреля 2010, 22:54:46
в my.cnf в секцию [mysqld]
добавьте (или замените, если там эти строки с другими кодировками)

default-character-set=utf8
init_connect='SET NAMES utf8'

и перезапустите mysql

Вот это помогло. Наконец-то! Доволен, как слон!!!  O0 Убил на это дело в общей сложности три дня.
Пресвятому отцу администрирования digger'у респект и уважуха! Внёс вклад в Вашу карму.

В общем, воспользовавшись этим советом , а также почитав некоторую мукулатуру в инете привёл свой файл /etc/my.cnf вот к такому виду:

[mysqld]
bind-address=127.0.0.1
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
user=mysql
character_set_server=utf8
default-character-set = utf8
init_connect='SET NAMES utf8'

[client]
default-character-set=utf8

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


Цитата: Mavn от 29 апреля 2010, 09:24:46
кстати говоря вполне возможно что в SSI.php не выставлена глобальная переменная указывающая кодировку как результат данные отдаются не так как нужно. Уже кстати была похожая проблема год или два назад и решилась дописыванием в глобал переменной.

Решение Mavn'а не применял, т.к. было желание решить проблему на серверном уровне, чтобы будущие установки новых сайтов и форумов не требовали решать проблемы с кодировками каждый раз с каждым новым SMF. Да и банально уже не хватило терпения искать в материалах двухгодичной давности, как называется эта глобальная переменная и как правильно её вставить в SSI.php.