Кодировка cp1251 -> utf8, phpmyadmin экспорт в Virtuemart

Тема в разделе "PHP", создана пользователем sasha_ua, 12 сен 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sasha_ua

    sasha_ua Постоялец

    Регистр.:
    23 июн 2010
    Сообщения:
    66
    Симпатии:
    0
    Здравствуйте.

    Уровень владения PHP: только начал.

    Существует задача спарсить самописный магазин в магазин Joomla-Virtuemart.

    Используется библиотека simple_html_dom.php

    Сайт-А(откуда)
    Исходная кодировка cp1251

    Сайт-Б(куда)
    Исходная кодировка utf8
    Кодировка текстовых полей в phpmyadmin - utf8_general_ci
    Сравнение - latin1_swedish_ci (не знаю почему)

    Как преобразовывал:
    1. $utf_8 = iconv('CP1251','UTF-8',$cp_1251);

    $cp_1251 - извлеченная строка в cp1251
    $utf_8 - результат преобразования, она и вставляется в БД

    2. $utf_8 = cp1251_to_utf8 ($cp_1251);

    Исходник брал отсюда:
    http://articles.org.ru/cn/showdetail.php?cid=8529
    PHP:
    function cp1251_to_utf8 ($txt)  {
        
    $in_arr = array (
            
    chr(208), chr(192), chr(193), chr(194),
            
    chr(195), chr(196), chr(197), chr(168),
            
    chr(198), chr(199), chr(200), chr(201),
            
    chr(202), chr(203), chr(204), chr(205),
            
    chr(206), chr(207), chr(209), chr(210),
            
    chr(211), chr(212), chr(213), chr(214),
            
    chr(215), chr(216), chr(217), chr(218),
            
    chr(219), chr(220), chr(221), chr(222),
            
    chr(223), chr(224), chr(225), chr(226),
            
    chr(227), chr(228), chr(229), chr(184),
            
    chr(230), chr(231), chr(232), chr(233),
            
    chr(234), chr(235), chr(236), chr(237),
            
    chr(238), chr(239), chr(240), chr(241),
            
    chr(242), chr(243), chr(244), chr(245),
            
    chr(246), chr(247), chr(248), chr(249),
            
    chr(250), chr(251), chr(252), chr(253),
            
    chr(254), chr(255)
        );   
        
    $out_arr = array (
            
    chr(208).chr(160), chr(208).chr(144), chr(208).chr(145),
            
    chr(208).chr(146), chr(208).chr(147), chr(208).chr(148),
            
    chr(208).chr(149), chr(208).chr(129), chr(208).chr(150),
            
    chr(208).chr(151), chr(208).chr(152), chr(208).chr(153),
            
    chr(208).chr(154), chr(208).chr(155), chr(208).chr(156),
            
    chr(208).chr(157), chr(208).chr(158), chr(208).chr(159),
            
    chr(208).chr(161), chr(208).chr(162), chr(208).chr(163),
            
    chr(208).chr(164), chr(208).chr(165), chr(208).chr(166),
            
    chr(208).chr(167), chr(208).chr(168), chr(208).chr(169),
            
    chr(208).chr(170), chr(208).chr(171), chr(208).chr(172),
            
    chr(208).chr(173), chr(208).chr(174), chr(208).chr(175),
            
    chr(208).chr(176), chr(208).chr(177), chr(208).chr(178),
            
    chr(208).chr(179), chr(208).chr(180), chr(208).chr(181),
            
    chr(209).chr(145), chr(208).chr(182), chr(208).chr(183),
            
    chr(208).chr(184), chr(208).chr(185), chr(208).chr(186),
            
    chr(208).chr(187), chr(208).chr(188), chr(208).chr(189),
            
    chr(208).chr(190), chr(208).chr(191), chr(209).chr(128),
            
    chr(209).chr(129), chr(209).chr(130), chr(209).chr(131),
            
    chr(209).chr(132), chr(209).chr(133), chr(209).chr(134),
            
    chr(209).chr(135), chr(209).chr(136), chr(209).chr(137),
            
    chr(209).chr(138), chr(209).chr(139), chr(209).chr(140),
            
    chr(209).chr(141), chr(209).chr(142), chr(209).chr(143)
        );   
        
    $txt str_replace($in_arr,$out_arr,$txt);
        return 
    $txt;
    }
    Это только 2 последних варианта... Причем когда я копировал текст с исходного сайта в буфер и вставлял его напрямую в phpmyadmin, с отображением не возникало проблем.
    В phpmyadmin выводит кашу, и тут 2 варианта, либо не работает конвертация, либо что-то не так в phpmyadmin, но я не в силах понять на каком этапе возникает проблема..
    Вот скрин того что я вижу в phpmyadmin:
    Перейти по ссылке
     
  2. sasha_ua

    sasha_ua Постоялец

    Регистр.:
    23 июн 2010
    Сообщения:
    66
    Симпатии:
    0
    Решение найдено:

    В phpmyadmin делаем запрос:
    SHOW GLOBAL VARIABLES LIKE 'char%';

    выводит:
    Variable_name: Value
    character_set_client: latin1
    character_set_connection: latin1
    character_set_database: latin1
    character_set_filesystem: binary
    character_set_results: latin1
    character_set_server: latin1
    character_set_system: utf8
    character_sets_dir: c:\wamp\bin\mysql\mysql5.1.36\share\charsets\

    Кодировка character_set_connection: latin1, а должна быть utf8.

    Два варината решения:

    1. Если есть доступ к my.ini

    Предполагается что все скрипты и соединения будут работать в
    utf8.

    В файл my.ini, раздел [mysqld], добавить код:
    2. Второй вариант

    Найти в файлах скрипта функцию mysql_connect, и после нее добавить:
     
  3. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    в обще как бы указывать кодировку при соединении это нормальная практика, а то мало ли какие хостеры бывают) не все же дома хостится
     
Статус темы:
Закрыта.