За последние 24 часа нас посетили 49946 программистов и 1730 роботов. Сейчас ищет 661 программист ...

Запутался с кодировкой

Тема в разделе "PHP для новичков", создана пользователем graf_vorontsov, 15 янв 2013.

  1. graf_vorontsov

    graf_vorontsov Активный пользователь

    С нами с:
    12 фев 2011
    Сообщения:
    183
    Симпатии:
    1
    Адрес:
    Украина, Харьков
    Код (Text):
    1.  
    2. //сам файл скрипта в кодировке UTF-8
    3. function get_array(данные поступают из csv файла в кодировке cp1251 в виде многомерного массива){
    4. //добавляю один элемент к этому массиву
    5. }
    6.  
    7. $zakaz = get_array($price_zakaz, iconv('utf-8', 'cp1251','заказ'));
    8.  
    9. function into_csv(записываю полученный массив в файл csv){
    10. кодировка при записи в файл получается cp1251
    11. }
    если открыть файл в notepad++ то видно что кодировка ANSI все русские символы видно прекрасно, но
    когда я опять считываю данные из уже полученного файла, то те данные которые были изначально я перекодирую в UTF-8 так
    Код (Text):
    1.         function cp1251_utf8( $sInput ){
    2.             $sOutput = "";
    3.  
    4.             for ( $i = 0; $i < strlen( $sInput ); $i++ ){
    5.                 $iAscii = ord( $sInput[$i] );
    6.  
    7.                 if ( $iAscii >= 192 && $iAscii <= 255 )
    8.                 $sOutput .=  "&#".( 1040 + ( $iAscii - 192 ) ).";";
    9.                 else if ( $iAscii == 168 )
    10.                 $sOutput .= "&#".( 1025 ).";";
    11.                 else if ( $iAscii == 184 )
    12.                 $sOutput .= "&#".( 1105 ).";";
    13.             else
    14.             $sOutput .= $sInput[$i];
    15.             }
    16.         return $sOutput;
    17.         }
    18.  
    19. $value[2] = cp1251_utf8($value[2]);
    почему так, потому что iconv не конвертирует почемуто.

    и выводится на экран всё супер, а если пытаюсь также перекодировать вот этот элемент массива
    Код (Text):
    1. 'заказ'
    который я добавил сам - вообще выводит пустую ячейку!
    если не применять вообще function cp1251_utf8 то русский текст вообще не выводится не тот что был ни тот что добавил.

    Код (Text):
    1. $status = iconv('cp1251','utf-8',$value['5']); //это то что я добавил
    не работает!!! на хостинге

    на Денвере работает без проблем.

    как быть? перепробовал много вариантов смены кодировки ничего не нашёл чтоб у меня сработало.
    скрипт работает как модуль Joomla если это имеет значение.
     
  2. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    А если попробовать mb_convert_encoding?
     
  3. graf_vorontsov

    graf_vorontsov Активный пользователь

    С нами с:
    12 фев 2011
    Сообщения:
    183
    Симпатии:
    1
    Адрес:
    Украина, Харьков
    спасибо, попробую.
    я пробовал так
    Код (Text):
    1. mb_internal_encoding("UTF-8");
    но толку от этого никакого... а не, такое сработало если в БД выгружать данные а не в файл выводить
     
  4. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    А вообще может банально кодировка выхлопа в браузер на хостинге отличается от той что в денвере?
     
  5. graf_vorontsov

    graf_vorontsov Активный пользователь

    С нами с:
    12 фев 2011
    Сообщения:
    183
    Симпатии:
    1
    Адрес:
    Украина, Харьков
    не, определяет браузер одинаково UTF-8 что на Денвере что на хостинге.
    пока ещё не попробовал ваш вариант.. надо домой попасть и протестирую
    кодировка постоянно выносит мозг :)
     
  6. graf_vorontsov

    graf_vorontsov Активный пользователь

    С нами с:
    12 фев 2011
    Сообщения:
    183
    Симпатии:
    1
    Адрес:
    Украина, Харьков
    не помогло......
     
  7. graf_vorontsov

    graf_vorontsov Активный пользователь

    С нами с:
    12 фев 2011
    Сообщения:
    183
    Симпатии:
    1
    Адрес:
    Украина, Харьков
    вот такой бред на мой взгляд пришлось сделать.... но работает!
    Код (Text):
    1. echo setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'), PHP_EOL;
    2.  
    3. $status = iconv('cp1251','utf-8', $value['5']);
    4. $status = iconv('utf-8', 'cp1251', $status);
    почему так работает?
     
  8. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    А хостинг забугорный не?

    Добавлено спустя 2 минуты 24 секунды:
    Я просто вообще сейчас встал колом%)
     
  9. graf_vorontsov

    graf_vorontsov Активный пользователь

    С нами с:
    12 фев 2011
    Сообщения:
    183
    Симпатии:
    1
    Адрес:
    Украина, Харьков
    да никакой не забугорный mirohost.net
     
  10. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    лол. Ну я хз, я в замешательстве. Мне бы файл да сорцы, я у себя поколупаюсь.
     
  11. graf_vorontsov

    graf_vorontsov Активный пользователь

    С нами с:
    12 фев 2011
    Сообщения:
    183
    Симпатии:
    1
    Адрес:
    Украина, Харьков
    та я сам в замешательстве :) ну пусть уже будет если заставил работать. хрен с ним :)
     
  12. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    А вообще у меня со временем появилось мнение, что iconv шляпа%), mb_* намного лучше себя проявляют