Битая кодировка всех сообщений у пользователя

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
vlaimir
phpBB 1.0.0
Сообщения: 6
Стаж: 15 лет 1 месяц

Битая кодировка всех сообщений у пользователя

Сообщение vlaimir »

Перешел с phpBB2 на phpBB3, в результате у одного пользователя все сообщения в другой кодировке. Как можно это исправить?

Ручками через декодер накладно, много сообщений.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Битая кодировка всех сообщений у пользователя

Сообщение Sheer »

vlaimir писал(а):в другой кодировке
В какой?
vlaimir писал(а):Ручками через декодер накладно, много сообщений.
Написать скрипт.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
vlaimir
phpBB 1.0.0
Сообщения: 6
Стаж: 15 лет 1 месяц

Re: Битая кодировка всех сообщений у пользователя

Сообщение vlaimir »

Кодировка, как я понимаю: CP1252 у всех сообщений одного пользователя.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Битая кодировка всех сообщений у пользователя

Сообщение Sheer »

Попробуй так

Код: Выделить всё

<?php
header('Content-Type: text/html; charset=UTF-8');
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();

    $sql = 'SELECT * FROM ' .POSTS_TABLE. ' WHERE poster_id = ид_пользователя';
    $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result))
    {
        $new = iconv("UTF-8", "CP1251//IGNORE", $row['post_text']);
        $sqlc = "UPDATE " .POSTS_TABLE. " SET post_text = '.$new.' WHERE poster_id = ид_пользователя";
        $res = $db->sql_query($sqlc);
    }
?>
Где ид_пользователя = id пользователя с битой кодировкой.
NB! Предварительно сделать резервную копию!
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
vlaimir
phpBB 1.0.0
Сообщения: 6
Стаж: 15 лет 1 месяц

Re: Битая кодировка всех сообщений у пользователя

Сообщение vlaimir »

Получил
General Error
SQL ERROR [ mysql4 ]

Incorrect string value: '\x96 ...' for column 'post_text' at row 1 [1366]

An sql error occurred while fetching this page. Please contact an administrator if this problem persists.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Битая кодировка всех сообщений у пользователя

Сообщение Sheer »

Посыпаю голову пеплом, ибо
vlaimir писал(а):как я понимаю: CP1252
, а я воткнул 1251
поменяйте

Код: Выделить всё

$new = iconv("UTF-8", "CP1251//IGNORE", $row['post_text']); 
на

Код: Выделить всё

$new = iconv("UTF-8", "CP1252//IGNORE", $row['post_text']); 
и посмотрите, какое значение принимает переменная $new

Код: Выделить всё

print "$new<br />"; 
и на всякий случай проверьте кодировку http://www.artlebedev.ru/tools/decoder/
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
vlaimir
phpBB 1.0.0
Сообщения: 6
Стаж: 15 лет 1 месяц

Re: Битая кодировка всех сообщений у пользователя

Сообщение vlaimir »

Sheer писал(а):и посмотрите, какое значение принимает переменная $new
Текст printom выводит правильный, если убрать первую строчку:
header('Content-Type: text/html; charset=UTF-8');

но при вставке в базу опять выдает ошибку:
SQL ERROR [ mysql4 ]
Incorrect string value: 'xCFxF0xE8 xE8xF1...' for column 'post_text' at row 1 [1366]

Добавлено спустя 1 минуту 28 секунд:
Sheer писал(а):и на всякий случай проверьте кодировку
раскодирует исходник, пишет:
CP1252 → CP1251
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Битая кодировка всех сообщений у пользователя

Сообщение Sheer »

Выложите тут (или в ЛС) дамп таблицы posts с выборкой сообщений этого конкретного пользователя.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
vlaimir
phpBB 1.0.0
Сообщения: 6
Стаж: 15 лет 1 месяц

Re: Битая кодировка всех сообщений у пользователя

Сообщение vlaimir »

Один из постов.

Код: Выделить всё

-- Дамп данных таблицы `phpbb3_posts`
--

INSERT INTO `phpbb3_posts` (`post_id`, `topic_id`, `forum_id`, `poster_id`, `icon_id`, `poster_ip`, `post_time`, `post_approved`, `post_reported`, `enable_bbcode`, `enable_smilies`, `enable_magic_url`, `enable_sig`, `post_username`, `post_subject`, `post_text`, `post_checksum`, `post_attachment`, `bbcode_bitfield`, `bbcode_uid`, `post_postcount`, `post_edit_time`, `post_edit_reason`, `post_edit_user`, `post_edit_count`, `post_edit_locked`) VALUES
(6195, 1003, 2, 1680, 0, '62.141.50.149', 1190465881, 1, 0, 0, 0, 1, 0, '', 'Êîððåêòèðîâêà ÿðêîñòè â InnerPulse', 'Ïðè èñïîëüçîâàíèè InnerPulse ñîâìåñòíî ñ î÷êàìè Premium (áåëûå) íàáëþäàåòñÿ íåðàâíîìåðíîñòü ñâå÷åíèÿ ïðàâîé è ëåâîé ãðóïï ñâåòîäèîäîâ. \r\n\r\nÝôôåêò íàèáîëåå çàìåòåí ïðè óìåíüøåíèè óðîâíÿ ÿðêîñòè ðåãóëÿòîðîì – ñíà÷àëà âûêþ÷àåòñÿ ïðàâàÿ ãðóïïà ñâåòîäèîäîâ, è, òîëüêî ïðè äàëüíåéøåì óìåíüøåíèè ÿðêîñòè, – ëåâàÿ.\r\nÈñïîëüçîâàíèå âñòðîåíîé â InnerPulse êîððåêòèðîâêè ÿðêîñòè (ìåíþ oPL) íå ïîçâîëÿåò ïîëíîñòüþ óñòðàíèòü ïðîáëåìó – ìîæíî âûðîâíÿòü ÿðêîñòè ñâåòîäèîäîâ ïðè çàôèêñèðîâàííîì ïîëîæåíèè îáùåãî ðåãóëÿòîðà ÿðêîñòè, îäíàêî, ïðè ïîñëåäóþùåì èçìåíåíè îáùåãî óðîâíÿ, ÿðêîñòü ãðóïï îïÿòü ñòàíîâèòñÿ íåðàâíîìåðíîé. Òàêæå, èçìåíåíèå ÿðêîñòè â ïðîöåññå âîñïðîèçâåäåíèÿ ïðåñåòîâ òîæå ïðèâîäèò ê íåðàâíîìåðíîñòè ñâå÷åíèÿ ñâåòîäèîäîâ. Ïîõîæå, âñòðîåíàÿ êîððåêòèðîâêà íå ó÷èòûâàåò çàêîí èçìåíåíèÿ ÿðêîñòè â çàâèñèìîñòè îò âûõîäíîãî íàïðÿæåíèÿ.\r\n\r\nÐàçëè÷èå â ñòåïåíè ðåàêöèè ïðàâûõ è ëåâûõ ñâåòîäèîäîâ ïðèâîäèò ê ñìåùåíèþ ôàç ñâåòîâûõ èìïóëüñîâ (õîðîøî çàìåòíî ïðè ìàëîé ÿðêîñòè), à, ñëåäîâàòåëüíî – ê èçìåíåíèþ õàðàêòåðà âîçäåéñòâèÿ ñòèìóëÿöèè íà àêòèâíîñòü ìîçãà. Âîçìîæíî òàêæå, ÷òî ïðîèñõîäèò îäíîñòîðîííÿÿ ðàññèíõðîíèçàöèÿ âèçàóëüíîãî è çâóêîâîãî âîçäåéñòâèé.\r\n\r\nÑãëàäèòü  íåðàâíîìåðíîñòü óäàåòñÿ òîëüêî ñóùåñòâåííûì óâåëè÷åíèåì îáùåé ÿðêîñòè. Ïîíÿòíî,  â ñëó÷àå î÷êîâ Premium, - ýòî íå âñåãäà ïðèÿòíàÿ ìåðà...\r\n\r\nÍàáëþäàåòñÿ ëè ïîäîáíûé ýôôåêò ïðè èñïîëüçîâàíèè äðóãîãî òèïà î÷êîâ? Óäàëîñü ëè êîìó-íèáóäü ðåøèòü óêàçàííóþ ïðîáëåìó?', '', 0, 'wA==', 'vyohapwd', 1, 0, '', 1680, 0, 0);
Последний раз редактировалось FEAR93 17.08.2011 11:16, всего редактировалось 1 раз.
Причина: Заключил код в BBCode
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Битая кодировка всех сообщений у пользователя

Сообщение Sheer »

Фиг знает...
Сделайте так

Код: Выделить всё

<?php
header('Content-Type: text/html; charset=utf-8');
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

    print "Starting...<br />";

    $fp2 = fopen('out.sql','wb');
    $sql = 'SELECT * FROM ' .POSTS_TABLE. ' WHERE poster_id = 1680';
    $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result))
    {
        $new = iconv("UTF-8", "CP1252", $row['post_text']);
        $new_sumbj = iconv("UTF-8", "CP1252", $row['post_subject']);
        $sqlc = 'UPDATE ' .POSTS_TABLE. ' SET post_text = \''.$new.'\', post_subject = \''.$new_sumbj.'\' WHERE post_id = '.$row['post_id'].';';
        fwrite( $fp2, $sqlc);
        fwrite( $fp2, chr(13));
    }

    fclose($fp2);
    print "Done!";
?>
Проверьте кодировку у получившегося файлаout.sql. Откройте его в Notepad++, если кодировка будет ANSI сохраните в UTF-8 без BOM, затем импортируйте в phpMyAdmin.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
vlaimir
phpBB 1.0.0
Сообщения: 6
Стаж: 15 лет 1 месяц

Re: Битая кодировка всех сообщений у пользователя

Сообщение vlaimir »

Сделал, при запуске выдает:
Ответ MySQL: Документация
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'а.

Т.к. иÑ

Часть сообщений перекодировалась.
Теперь, чтобы делать новые перекодировки нужно удалять посты из запроса, которые уже перекодированы.

Добавлено спустя 44 минуты 15 секунд:
Нашел способ перекодировать через PhpMyAdmin.

Делаем выборку id и постов пользователя с битой кодировкой.
Затем выделяем их все и делаем их экспорт с функцией Update.

Полученный дамп загоняем в http://www.artlebedev.ru/tools/decoder/
и потом в PhpMyAdmin запускаем.

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