За последние 24 часа нас посетили 59738 программистов и 1852 робота. Сейчас ищут 1045 программистов ...

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

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

  1. igramnet

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

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    Есть файл, сохраненный в UTF-8
    через команду file_get_contents получаю содержимое файла и показывает текст

    Код (Text):
    1. Компьютеры (Моноблоки)
    пробовал через iconv кодировать из UTF в windows-1251 = получаю пустоту. Что делать?

    Если файл сохранён в кодировке ANSCII - то все нормально.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
  3. igramnet

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

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    так браузер открывает страницу в windows1251, именно на этой кодировке сделан сайт
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    вариантов немного: либо научишся пользоваться iconv, либо будешь использовать ТОЛЬКО utf-8 везде.
     
  5. igramnet

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

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    так в чем моя ошибка с iconv ? почему не пустоту выдает при кодировании?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    хз, я не силен в телепатии
     
  7. igramnet

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

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    У меня есть документ - http://demo9.savgroup.ru/uploads/catalog/_yml/1.xml
    Я его загружаю через функцию file_get_contents в переменную $xml_content
    Далее если просто написать echo $xml_content; то мне выдаст кракозябли вида

    Код (Text):
    1. Компьютеры (Моноблоки)
    Поэтому я пытаюсь сделать

    $xml_content = iconv("UTF-8", "WINDOWS-1251", $xml_content);

    и потом echo $xml_content;

    но выводит пустоту. Почему?

    сайт работает под кодировкой widnows-1251 и все PHP файлы в этой же кодировке. А вот XML - в UTF-8
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    1. наверняка генерируется предупреждение, которое ты не читаешь
    http://phpfaq.ru/debug
    внезапно может оказаться, что ты не ту переменную выводишь. или твоя исходная строка содержит невалидные символы.

    2. можешь попробовать отбрасывать проблемные символы через //IGNORE , как в документации описано. тогда один "плохой" символ не испортит всю строку

    и наконец есть альтернатива: mb_convert_encoding. хотя iconv не может не работать )))
     
  9. igramnet

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

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    //IGNORE обрезал все русские символы.


    ошибки следующие

     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Если исходная строка это UTF-8 с BOM, то будет как раз такое предупреждение. Но "CP1251//IGNORE" должно работать. Где-то ручки шаловливые накосячили.
     
  11. igramnet

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

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    Код (Text):
    1.  
    2. <?php
    3. @header( "Content-type: text/html; charset=WINDOWS-1251" );
    4.   $xml_content = file_get_contents ( "http://demo9.savgroup.ru/uploads/catalog/_yml/1.xml" );
    5. ini_set('display_errors',1);
    6. error_reporting(E_ALL);
    7.     $xml_content = iconv("UTF-8", "WINDOWS-1251//IGNORE", $xml_content);
    8. echo $xml_content;
    9. ?>
    вот так сделал, но русские символы все обрезались. Почему?
     
  12. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Что-то я не нашёл по адресу "http://demo9.savgroup.ru/uploads/catalog/_yml/1.xml" ни одного русского символа.
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    да уж. косячник конкретный.
     
  14. igramnet

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

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    Спасибо!
     
  15. igramnet

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

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    Смотрите, просто в PHP файле метод работает,
    а вот если я вставляю в скрипт свой, то пишет

    Notice: iconv(): Detected an illegal character in input string in

    Но ведь я вставляю код точь-в-точь.
     
  16. igramnet

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

    С нами с:
    16 дек 2013
    Сообщения:
    17
    Симпатии:
    0
    вопрос. Почему на локале без ошибок такой скрипт работает, а на хостинге с ошибкой (которая в сообщении выше)?

    Какая настройка может влиять?
     
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям