Передать данные из формы win1251 в скрипт на utf-8

Тема в разделе "PHP", создана пользователем andrewa, 16 дек 2009.

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

    andrewa

    Регистр.:
    11 янв 2008
    Сообщения:
    171
    Симпатии:
    7
    имеется сайт в кодировке windows-1251 и скрипт рассылки на utf-8 (соответственно и базы данных разные), когда я устанавливаю форму подписки на рассылку на сайт, то после заполнения полей "email" и "Имя", email записывается в базу скрипта рассылки, а имя нет из-за кодировки (проверял, когда форма заполняется на странице с кодировкой utf-8, то все четко передается и сохраняется в скрипт рассылки).

    как можно из формы на странице с кодировкой windows-1251 передать русский текст в скрипт (базу данных) на utf-8? в форме 2 поля "email" и "Имя"...
     
  2. phantom_nsd

    phantom_nsd Писатель

    Регистр.:
    16 сен 2009
    Сообщения:
    7
    Симпатии:
    1
    Я бы использовал функцию mb_convert_encoding (string str, string to-encoding [, mixed from-encoding]), а именно
    PHP:
    $data ''//переменная, которая заноситься в базу данных
    $data mb_convert_encoding($_POST['переменная формы'], "UTF-8");

    //затем выполняешь запрос к базе данных, как пример
    mysql_query("insert into table values($data)"); 
    более подробно о функции можешь почитать здесь
    Перейти по ссылке
     
  3. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Не у всех на хостинге стоит библиотека для работы с мультибайтовыми строками. Как вариант рекомендую использовать ф-ю iconv
     
  4. diden05

    diden05 Создатель

    Регистр.:
    20 окт 2009
    Сообщения:
    13
    Симпатии:
    4
    iconv уже не торт?:(
     
  5. _AlexSK_

    _AlexSK_ Постоялец

    Регистр.:
    30 окт 2008
    Сообщения:
    59
    Симпатии:
    8
    Пользуйте поиск. Я уже публиковал в этой ветке форума функции для перевода текста utf <-> win1251, которые работают на любом хостинге.
     
  6. andrewa

    andrewa

    Регистр.:
    11 янв 2008
    Сообщения:
    171
    Симпатии:
    7
    да, просмотрев ваши записи нашел только function utf2win, а win1251 to utf8 нету ...

    куда нужно функцию iconv() запихивать? в страницу добавления нового пользователя скрипта рассылки? данные поля "Имя" содержатся в переменной $data я вставляю в страницу добавки нового подписчика код
    PHP:
    $data iconv("windows-1251""utf-8""$data");
    и все равно в базе данных скрипта рассылки пустое поле, так как форма заполнялась на странице в windows-1251 :(
     
  7. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    В скрипт который принимает входные данные
     
  8. _AlexSK_

    _AlexSK_ Постоялец

    Регистр.:
    30 окт 2008
    Сообщения:
    59
    Симпатии:
    8
    PHP:
    function win2utf($s) {
        if ( 
    function_exists('iconv') ) {
            return 
    iconv("CP1251""UTF-8"$s);
        }
        if ( 
    function_exists('mb_convert_encoding') ) {
            return 
    mb_convert_encoding($s"UTF-8""CP1251");
        }
        for( 
    $i 0$t ""$m strlen($s); $i $m$i++ ) {
            
    $c ord($s[$i]);
            if ( 
    $c <= 127 ) { $t .= chr($c); continue; }
            if ( 
    $c >= 192 && $c <= 207 ) { $t .= chr(208).chr($c-48); continue; }
            if ( 
    $c >= 208 && $c <= 239 ) { $t .= chr(208).chr($c-48); continue; }
            if ( 
    $c >= 240 && $c <= 255 ) { $t .= chr(209).chr($c-112); continue; }
            if ( 
    $c == 171 ) { $t .= chr(194).chr(171); continue; }//«
            
    if ( $c == 187 ) { $t .= chr(194).chr(187); continue; }//»
            
    if ( $c == 168 ) { $t .= chr(208).chr(129); continue; };//russion YO 
            
    if ( $c == 184 ) { $t .= chr(209).chr(145); continue; };//russion yo
            
    if ( $c == 170 ) { $t .= chr(208).chr(132); continue; };//ukrainian YE
            
    if ( $c == 186 ) { $t .= chr(209).chr(148); continue; };//ukrainian ye
            
    if ( $c == 178 ) { $t .= chr(208).chr(134); continue; };//ukrainian YI
            
    if ( $c == 179 ) { $t .= chr(209).chr(150); continue; };//ukrainian yi
            
    if ( $c == 175 ) { $t .= chr(208).chr(135); continue; };//ukrainian I
            
    if ( $c == 191 ) { $t .= chr(209).chr(151); continue; };//ukrainian i
        
    }
        return 
    $t;
    }
    Вызывайте перед добавлением в базу.
    Я, например, вызываю прямо в параметрах метода добавления записи:
    PHP:
    $db->addwin2utf$str ) );
     
  9. andrewa

    andrewa

    Регистр.:
    11 янв 2008
    Сообщения:
    171
    Симпатии:
    7
    ни фига не получилось, возможно я не туда вставляю... не знаю...

    пришлось вывести форму подписки на отдельную страницу сайта без дизайна в кодировке utf-8 и в начале страницы прописать:

    PHP:
    <?php header('Content-type: text/html; charset=utf-8')?>
    Таким образом в базу попадают данные в нужной кодировке (utf-8) и поля заполненные отображаются...

    не совсем то, что хотелось, но по крайней мере работает!
     
  10. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    если из страницы в одной кодировке сохранять в mysql базу в другой кодировке, то надо указать кодировку соединения перед сохранением в базу, в этом случае кодировка соединения cp1251:

    PHP:
    //переключение на базу скрипта рассылки
    mysql_select_db("drugaja_utf8_baza");
    mysql_query("SET NAMES 'cp1251'");
    mysql_query("INSERT INTO ...");
    //дальше переключение на базу сайта
    mysql_select_db("baza_cp1251");
     
Статус темы:
Закрыта.