Перекодировка средствами php

Перекодировка средствами php

07.08.2019

Недавно мне сдали на реанимацию один сайтик.. написанный 10 лет назад.
В нем отсутствовало верхнее меню и всплывающее подменю, выводимое на основе открытого основного..
Покопавшись в коде, я, конечно, вспомнил много нецензурных выражений, словил один кошмарный сон, когда выяснил, что данные при переезде с хостинга на хостинг не были нормально переконвертированы.
[cut]
Сам сайт - в cp1251
База - в koi8r. А данные в ней - в cp1251, т.е. нечитабельные совсем через phpmyadmin.
Но, как ни странно, программер докрутил все таким образом, что везде отображались корректные символы (кроме верхнего меню, которого вообще не было).
Как оказалось, за вывод этого меню отвечал xml-файл.. закодированный в cp1251. Но парсеры xml-были написаны таким образом, что не видели в этой кодировке ни одного символа. Перевожу кодировку или указываю в шапке кодировку - тогда меню становится видимым, но крякозябрами. Декодер лебедева говорит что родная кодировка UTF-8... пришлось разбираться в чужом грязном (и тухлом, за 10 лет-то) белье, искать в коде вывод всех данных из этого XML. А это титулы страниц, заголовки, древовидное меню для каждой страницы, шапка конечно же. Спасла меня функция [b]iconv()[/b]. Когда доделал почти все, до меня вдруг дошло, что впринципе можно было бы так не мучиться, а в самом парсере циклом переконвертировать все строки массива, не лазя поиском по коду всего сайта.. Но возвращаться было уже лень, поэтому доделал.. 
Еще я бы руки оторвал, поджарил и скормил тому, что локализации сайтов кладет в подпапку основного хостинга с полностью уникальной файловой структурой.. к тому же код правился в разное время и похоже разными людьми, и всю работу по локализации ру пришлось делать заново на другом кириллическом языке.
Еще была попытка переконвертировать дамп базы и весь сайт целиком в UTF-8, но я застрял на двух вещах - дамп на мой локальный комп решил встать с ошибкой на какой-то там строке, данные загрузились процентов на 10, а все картинки помещены в базу, размер огромный, ручками кодировку не сменишь.. вобщем, веселые выдались выходные.
Совет тому, кто пишет самописные сайты - уважайте труд мучеников, разбирающих потом ваш хлам, делайте его в одной кодировке. Ну и хоть немного комментируйте код.
Веселые получились выходные:) выспаться бы теперь.

Показать комментарии ()
Меню
{'pdoMenu' | snippet : [ 'startId' => 0, 'level' => 1, 'resources' => '', 'outerClass' => 'menu' ]}
{ignore}ignore_91f07620c05060392b7124e641c316ce{/ignore}