За последние 24 часа нас посетил 22581 программист и 1594 робота. Сейчас ищут 897 программистов ...

Проблема с кодировкой UTF-8

Тема в разделе "PHP для новичков", создана пользователем блудный сын, 21 окт 2008.

  1. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Опять запутался в кодировках :( Скриптом получаю страничку и сохраняю ее содержимое в файл, но в файле сплошная абракадабра типа такой:
    Код (Text):
    1. V‡ґП$®^"јИґpZz#«OJ„,H7|к{Аџ+¬р®L†wЁв"(pq™QFЯФ †уhРЏa'mлW ъ'©кµ^8HOdќѕEFЌЪГчы¤MАъдР‡хЖ>µАP0ј•™КsNЉЪњШ®Vn‹јIFрЩІЋЏґ…&ШЇ}–Л2лЋ\.™ЈЋВЃШЗ’ЄЮxшY­`M;Ѕё]бЋ‰<AЭ¶е
    2. 'цY Z=!эЁ5bЭћј:qToа%Uґл1вx4ЉЪ–ЧФN„Гяёе‰fђГвG№‹(<
    В заголовках странички указано, что она в UTF-8, но ставлю в блокноте UTF-8 и все равно вижу абракадабру. Подскажите, как сохранить данные полученные в UTF-8 в какой-нибудь кирилистической кодировке понятной для просмотра. Пробовал разные варианты с функцией iconv, но не помогло. В браузере же эта страничка открывается хорошо и понятно.
     
  2. kostyl

    kostyl Guest

    блудный сын
    Может mb_convert_encoding или как она там, только расскоментируй в ext нужную dll
     
  3. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Щя попробую
     
  4. alBoo

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

    С нами с:
    27 мар 2008
    Сообщения:
    63
    Симпатии:
    0
    а помоему она просто загзипована
     
  5. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    А это мысль! А я все гадаю, почему при сохранении такой малый размер, хотя исходный код приличной длины! Попробую пойти по этому пути, тем более что mb_convert_encoding пока подключить не получилось. РНР при перезагрузке ругается, что не может найти php_mcrypt.dll (хотя вроде есть и в системную паку скопирован) и выдает ошибку Call to undefined function mb_convert_encoding() in
     
  6. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Подскажите, а какой сейчас функцией модно анзипировать?
     
  7. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    А страничка точно зазипована! Переименовал тоталкомандером в .zip распаковал и увидел нужное! Подскажите, как налету раскодировать и сохранять в раскодированном виде?
     
  8. kostyl

    kostyl Guest

    блудный сын
    вроде это браузер делает
     
  9. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ээ
    zlib
    pclzip
    на лету хз...
    а это не gzip? 0о
     
  10. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    А мне скриптом нужно
     
  11. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Кажись установил библиотеку ZIP.

    Как теперь лучше действовать? Зип архив находится в переменной. Как эти данные в переменной распаковать и сохранить на диск? Я с ним еще не работал.
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  13. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Для этого использую функцию:
    PHP:
    1.  
    2. $unzip=gzuncompress($zip);
    3.  
    Но выдает ошибку: gzuncompress() [function.gzuncompress]: data error in Что не так?
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ммм
    ну вот как у меня контент сжимается
    PHP:
    1. <?
    2. function checkgzip(){
    3.  
    4. return 0;
    5. }
    6. if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) return "x-gzip";
    7. if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) return "gzip";
    8. return 0;
    9. }
    10.  
    11. function gzip($level=2,$noprin=0){
    12. @header ("Last-Modified: " . date('r', time()-60*60*10) ." GMT");
    13. $ENCODING = checkgzip();
    14.    if ($ENCODING){
    15.         $info = "\n<!-- Сжатие: $ENCODING -->\n";
    16.         $Contents = ob_get_contents();
    17.         ob_end_clean();
    18.             $info.= "<!-- Размер файла до сжатия: ".strlen($Contents)." байт ";
    19.             $info.= "После сжатия: ".
    20.                    strlen(gzcompress($Contents, $level)).
    21.                    " байт -->";
    22.             if (!$noprin) $Contents .= $info;
    23.         header("Content-Encoding: $ENCODING");
    24.         $print="\x1f\x8b\x08\x00\x00\x00\x00\x00";
    25.         $Size = strlen($Contents);
    26.         $Crc = crc32($Contents);
    27.         $Contents = gzcompress($Contents, $level);
    28.         $Contents = substr($Contents,  0,  strlen($Contents) - 4);
    29.         $print.= $Contents;
    30.         $print.= pack('V', $Crc);
    31.         $print.= pack('V', $Size);
    32.         header("Content-length: ".strlen($print));
    33.         print $print;
    34.         exit;
    35.     }else{
    36.         ob_end_flush();
    37.         exit;
    38.     }
    39. }
    40.  
    41. ?>
     
  15. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Ого! Спасибо! Это пригодится! Но сейчас задача наоборот, разжать :( Для распаковки нет нечто подобного?
     
  16. kostyl

    kostyl Guest

    Рблудный сын
    ну ты точно блудный
    gzuncompress
     
  17. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Что ты этим хочешь сказать?
     
  18. kostyl

    kostyl Guest

    блудный сын
    а если я так скажу
    Код (Text):
    1.  
    2.  
    3. Пред.  CLXXXIX. Функции сжатия Zlib  След.
    4.  
    5. --------------------------------------------------------------------------------
    6.  
    7. gzuncompress
    8. (PHP 4 >= 4.0.1, PHP 5)
    9.  
    10. gzuncompress — Распаковывает строку
    11.  
    12. Описание
    13. string gzuncompress ( string $data [, int $length] )
    14.  
    15. Распаковывает строку.
    16.  
    17. Список параметров
    18.  
    19. data
    20. Данные, сжатые функцией gzcompress().
    21.  
    22. length
    23. Максимальная длина данных для распаковки.
    24.  
    25.  
    26. Возвращаемые значения
    27. Распакованные данные или FALSE в случае ошибки.
    28.  
    29. Функция сообщит об ошибке также в случае, когда распакованные данные длиннее в более, чем 32768 или length раз сжатых.
    30.  
    31. Смотрите также
    32. gzcompress()
    33. gzinflate()
    34. gzdeflate()
    35. gzencode()
     
  19. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    kostyl, намекаешь на то, что я не указал размер переменной? Так я пробовал и с длиной, результат тот же - ошибка.
    $unzip=gzuncompress($zip, strlen($zip));
    А без указания размера разве он не полностью подставляется?
     
  20. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  21. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Выдает: gzinflate() [function.gzinflate]: data error in :(
     
  22. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    блудный сын, покажи все заголовки, которые возвращает сервер.
     
  23. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Вот:
    Код (Text):
    1. HTTP/1.1 200 OK
    2. Date: Tue, 21 Oct 2008 12:26:39 GMT
    3. Server: Apache/1.3.29 (Unix) mod_perl/1.29 mod_deflate/1.0.21 rus/PL30.19
    4. Set-Cookie: *****
    5. Cache-Control: private
    6. Content-Type: text/html; charset=utf-8
    7. Connection: close
    8. Transfer-Encoding: chunked
    9. Content-Encoding: gzip
     
  24. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Но в принципе, я проблему решил. Оказалось если серверу не посылать:
    Код (Text):
    1.  $headers .= "Accept-Encoding: gzip, deflate, compress;q=0.9\r\n";
    т.е. не сообщать, что понимаешь сжатие, то он отдает ответ не в сжатом виде который уже можно читать нормально... Но если Вы все же поможете разобраться и с gzip, то возражать не буду
     
  25. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Дай url?