Проблема с РУСCКИМ.

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
Garret
phpBB 1.0.0
Сообщения: 1
Стаж: 18 лет 4 месяца

Сообщение Garret »

Хоть в теме последний ответ за полтора месяца назад, даю пояснение на будущее.

Никаких бубнов, все правильно! С подобным столкнулся только в версии mySQL старше 5.0 (хотя камрады говорят и на четверки проскакивал глюк), причем только на Unix.

Почем?
MySQL 5 использует для транзакций UTF8, причем не зависимо в какой кодировке хранится поле. Если PHP принимает стринг в UTF и расценивает его ка CP1251, то все символы смещаются за адрес #FF, и получают в 1251 это значение, или проще говоря символ "?"

Как?
просто! Нужно сказать mySQL в чем передавать строку.
" SET CODEP='cp1251' ; "
(возможно соврал, сейчас нет перед глазами)
Этот запрос вставить перед запросом на получение полей в function/bd.php для phpBB, мимо самой функции в db.php не пройдете

Удачи.

Примечание, для mySQL CODEP можно назначтиь и KOI8-R, что пофигу для PHP старше 3, т.к. есть мнение, что латиница в стрингах конвертится на лету
Shady
phpBB 1.0.0
Сообщения: 9
Стаж: 18 лет 3 месяца

Сообщение Shady »

Судя по всему эта-же проблема. Установил форум с нуля (брал отсюда). Локализацию ставил - надписи все русские. Но при попытке поменять скажем название сайта или описание сайта в админпанели на что-то русское - заместо букв вылезают знаки вопроса. Тоже самое при попытке переименования категорий и форумов во что-то русское. Пробую создать какую-то тему (по русски и с русским содержанием) выдаёт ошибку:
--------------------------------------------
Could not insert new word matches

DEBUG MODE

INSERT INTO phpbb_search_wordmatch (post_id, word_id, title_match) SELECT 5, word_id, 0 FROM phpbb_search_wordlist WHERE word_text IN ('Тут', 'должно', 'быть', 'сообщение')

Line : 251
File : functions_search.php
----------------------------------------------
Если писать по английски - всё Ок, никаких ошибок, топы создаются.
Лезу через phpMyAdmin 2.6.4 в БД (MySQL 4.1.14), вижу там в качестве Language - Russian (ru-utf-8)
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: изначально там стояло utf8_general_ci, пробовал менять на cp1251_general_ci - ничего не дало.
Во всех таблицах проставлена cp1251_general_ci.
Что с этим делать???
P.S. Пробовал вышенаписанное - результатов не дало, правда не уверен что правильно пробовал, всё-таки тут не все спецы по MySQL и PMA. Хотелось бы конкретно: где менять, что менять, на что менять. Заранее огромное спасибо!!!
Аватара пользователя
/DiOs
Former team member
Сообщения: 1139
Стаж: 19 лет 2 месяца
Откуда: Ленинград

Сообщение /DiOs »

Shady
Ну так а если все-таки поставить ru-utf-8, как у вас требует база данных, а? А не пытаться в нее писать cp1251?
И если я неправ, пусть старшие товарищи поправят меня
Shady
phpBB 1.0.0
Сообщения: 9
Стаж: 18 лет 3 месяца

Сообщение Shady »

/DiOs, спасибо, но опять же, можно чуть-чуть конкретнее???
1. Вы имеете ввиду в "Сопоставление соединения с MySQL" поставить "ru-utf-8"??? Нету там такого.
2. Таблицы уже создаются в cp1251_general_ci.
3. Или "поставить ru-utf-8" куда-то ещё?! :oops:
Последний раз редактировалось Shady 31.01.2007 13:21, всего редактировалось 1 раз.
Аватара пользователя
/DiOs
Former team member
Сообщения: 1139
Стаж: 19 лет 2 месяца
Откуда: Ленинград

Сообщение /DiOs »

Вы пробовали читать то, что нашли в поиске? Или не пользовались поиском практически вообще???

cp1251_general_ci -- это НЕ кодировка. Это collation, правила сортировки. Кодовая таблица в базе у вас, судя по всему, ru-utf-8. Применять к ней collation cp1251_general_ci -- бред сивой кобылы, но это совершенно не важно с т.з. занесения данных в БД. Поставьте ru-utf-8 туда, куда вы зачем-то пытались ставить cp1251.
И если я неправ, пусть старшие товарищи поправят меня
Shady
phpBB 1.0.0
Сообщения: 9
Стаж: 18 лет 3 месяца

Сообщение Shady »

/DiOs, видимо мы друг друга не понимаем... :-(
/DiOs писал(а):Вы пробовали читать то, что нашли в поиске? Или не пользовались поиском практически вообще???
Пробовал и пользовался. Конкретно моя проблема (со знаками вопроса заместо русских букв) описана только в этом топе. Что тут по этому поводу предлагается:
1. Раскоментить в lang_main.php строчку //$lang['ENCODING'] = 'windows-1251'; и прописать там cp1251.
Начну с того, что у меня она уже изначально раскоментирована. Пробовал менять в русском lang_main.php и на cp1251 и на ru-utf-8 - не помогает.
2. Сказать mySQL в чем передавать строку. " SET CODEP='cp1251' ; " Этот запрос вставить перед запросом на получение полей в function/bd.php для phpBB, мимо самой функции в db.php не пройдете
Это не пробовал. Потому как непонятно что конкретно, где конкретно и куда конкретно вставлять. Если нужно проделать это - уж не сочтите за труд, скажите перед какой строкой в каком файле вставлять. Не все программёры, не все знают php... Да и просто банально поменьше таких вот вопросов как у меня будет... Больше в этом топе практических советов не нашёл.
/DiOs писал(а):cp1251_general_ci -- это НЕ кодировка. Это collation, правила сортировки. Кодовая таблица в базе у вас, судя по всему, ru-utf-8. Применять к ней collation cp1251_general_ci -- бред сивой кобылы, но это совершенно не важно с т.з. занесения данных в БД.
Спасибо, понял.
/DiOs писал(а):Поставьте ru-utf-8 туда, куда вы зачем-то пытались ставить cp1251.
Куда туда??? Никуда кроме только что описанного п.1 не пытался!!! А там (в п.1) - не помогает!!!
Аватара пользователя
/DiOs
Former team member
Сообщения: 1139
Стаж: 19 лет 2 месяца
Откуда: Ленинград

Сообщение /DiOs »

Shady писал(а):Куда туда??? Никуда кроме только что описанного п.1 не пытался!!! А там (в п.1) - не помогает!!!
Еще раз утверждаю: вы не читали FAQ и не пользуетесь поиском. http://phpbbguru.net/community/viewtopi ... 0724#10724. Экстраполировать на свою ситуацию сумеете?
И если я неправ, пусть старшие товарищи поправят меня
Shady
phpBB 1.0.0
Сообщения: 9
Стаж: 18 лет 3 месяца

Сообщение Shady »

Сегодня победил. По-другому.
db/mysql.php
$this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
меняем на
$this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);mysql_query("SET NAMES 'cp1251'");
db/mysql4.php
$this->db_connect_id = ($this->persistency) ? mysql_pconnect($this->server, $this->user, $this->password) : mysql_connect($this->server, $this->user, $this->password);
меняем на
$this->db_connect_id = ($this->persistency) ? mysql_pconnect($this->server, $this->user, $this->password) : mysql_connect($this->server, $this->user, $this->password); mysql_query("SET NAMES 'cp1251'");
Всё прекрасно начинает работать!!! Скорее всего можно обойтись изменениями только одного из этих файлов в зависимости от используемой версии MySQL, не пробовал.
Спасибо всем за помощь!!!
Аватара пользователя
crash
Former team member
Сообщения: 6517
Стаж: 20 лет 9 месяцев
Откуда: Бердск

Сообщение crash »

Shady
вот что то мне подсказывает, что такое решение предлагалось на этом форуме. Так что делайте выводы
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
Shady
phpBB 1.0.0
Сообщения: 9
Стаж: 18 лет 3 месяца

Сообщение Shady »

crash, попробуйте найдите!!! :D Я тут более суток провёл и теперь прекрасно чуть ли не наизусть знаю чего тут предлагалось!!! Такого не предлагалось. Удачи!!! :wink:
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

Сообщение rxu »

Shady писал(а):Такого не предлагалось. Удачи!!!
Да что Вы говорите. FAQ, вопрос Q26, первая же ссылка на ответ
и сразу в начале темы - что же мы видим? Не может быть!!!
$db->sql_query("SET NAMES cp1251");
Изображение
Shady
phpBB 1.0.0
Сообщения: 9
Стаж: 18 лет 3 месяца

Сообщение Shady »

rxu, повнимательнее посмотрите в каком файле предлагается сделать сие изменение. И на само изменение. Я пробовал это одним из первых, мне не помогло.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

Сообщение rxu »

Shady
Повнимательнее посмотрите на db.php, и вы поймёте (а, возможно, и нет), что к чему.
Изображение
Shady
phpBB 1.0.0
Сообщения: 9
Стаж: 18 лет 3 месяца

Сообщение Shady »

rxu, вот, опять...
Я понимаю ваше (большинства модераторов) стремление указать не столько на само исправление ошибки, сколько на направление где её искать. Чтобы пользователь попытался разобраться сам, что-то понял и в следующий раз попытался понять суть ошибки сам, соответственно и сам её исправить, не напрягая вас и других участников этого форума.
Но по ряду причин не все и не всегда могут это сделать. Меня банально поджимает время, кому-то банально головы не хватает, у третьих свои причины... Так вот, вы бы с таким усердием, с которым защищаете свою честь и честь этого форума, подсказали бы лучше что конкретно где конкретно и на что конкретно поменять. Господи, ну неужели это так сложно???
Безтолково, скажите??? Отнюдь... Следующий коллега по несчастью придёт и посмотрит: ага, кодировка в базе у него была такая-же как у меня... Так, collation такой-же... Значится мне нужно сделать тоже что и сделал он: я написал где конкретно что конкретно и на что конкретно менять. Сложностей ноль.
Вы же снова предлагаете мне внимательнее смотреть на файл и пытаться понять что к чему... Повторюсь, я делал так как написано по Вашей ссылке в Вашем предыдущем посте - мне это НЕ ПОМОГЛО.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

Сообщение rxu »

Shady
Что Вы разводите бурю в стакане воды, к тому же оффтоп. Речь о другом. Файлы, в которые вы внесли изменения, все включены в db.php (см. include() ). Таким образом, в теме по ссылке дано универсальное решение для всех типов баз данных, ибо запрос $db->sql_query("SET NAMES cp1251"); происходит после подключения к базе любого типа. По сути, ваше решение - полный аналог, но неуниверсальный.
Единственное, в чём я не уверен - это в правильности синтаксиса строки "SET NAMES cp1251" (cp1251 или 'cp1251').
По всей видимости правильнее - второе (т.е. SET NAMES 'cp1251').
Изображение

Вернуться в «Поддержка phpBB 2.0.x»