Преобразование сериализованных массивов в базе данных Битрикс после изменения кодировки
<? | |
/* Массив таблиц и стобцов с сериализованными данными которые удалось найти */ | |
$arDB = array( | |
'b_component_params' => 'PARAMETERS', | |
'b_event' => 'C_FIELDS', | |
'b_event_log' => 'DESCRIPTION', | |
'b_event_message' => 'ADDITIONAL_FIELD', | |
'b_group' => 'SECURITY_POLICY', | |
'b_iblock_element_property' => 'VALUE', | |
'b_iblock_fields' => 'DEFAULT_VALUE', | |
'b_iblock_property' => 'USER_TYPE_SETTINGS', | |
'b_option' => 'VALUE', | |
'b_rating' => 'CONFIGS', | |
'b_rating_rule' => 'CONDITION_CONFIG', // два столбца 1 | |
'b_rating_rule' => 'ACTION_CONFIG', // два столбца 2 | |
'b_undo' => 'CONTENT', | |
'b_user_field' => 'SETTINGS', | |
'b_user_option' => 'VALUE', | |
'b_uts_user' => 'UF_SOCIAL_NETWORKS', | |
'b_xml_tree' => 'ATTRIBUTES', | |
); | |
global $DB; | |
foreach($arDB AS $k => $v): | |
$q1 = "SELECT `$v` FROM `$k`"; | |
$res = $DB->Query($q1); | |
while ($row = $res->Fetch()): | |
$val = $row[$v]; | |
if(empty($val) OR substr($val, 0, 2) != 'a:') continue; | |
// Если уже перевели базу в UTF-8 меняем данные обратно в win | |
$val = $APPLICATION->ConvertCharset($val, 'utf-8', 'windows-1251'); | |
/* Конвертируем обратно */ | |
$val = @unserialize($val); | |
if ($val === false) continue; | |
/* Преобразуем массив в кодироку UTF-8 */ | |
$val = $APPLICATION->ConvertCharsetArray($val, 'windows-1251', 'utf-8'); | |
/* По новой сериализуем */ | |
$val = serialize($val); | |
/* Пишем в бд */ | |
$q2 = "UPDATE `$k` SET `$v` = '$val' WHERE `$v` = '".$row[$v]."'"; | |
$DB->Query($q2); | |
endwhile; | |
endforeach; | |
?> | |
В продложении статьи: http://dev.1c-bitrix.ru/community/blogs/howto/1466.php |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment