За последние 24 часа нас посетили 20687 программистов и 1698 роботов. Сейчас ищут 1790 программистов ...

Помогите с кодировкой

Тема в разделе "Прочее", создана пользователем Claver, 2 фев 2014.

  1. Claver

    Claver Новичок

    С нами с:
    2 фев 2014
    Сообщения:
    11
    Симпатии:
    0
    Здравствуйте, гуглил и думал полтора дня, так для себя решения и не нашел.
    Вообщем приходит переменная (например ) $str в кодировке по ходу CP866 мне нужно выполнить конвертацию в читабельные слова.
    пробовал так (посоветовали онлайн декодеры):
    Код (Text):
    1.  
    2. $str='ъєяшЄ№ сєъхЄ ЎтхЄют';
    3. $str=iconv('CP866','CP1251',$str);
    4. echo $str;
    но это отдает мне пустой результат.
    P.S. Конвертация происходит в файле с кодировкой utf-8 потом это пишется в файл с ANSI.
    Пожалуйста помогите...
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А может точно узнаешь?

    php.net/manual/ru/function.mb-detect-encoding.php
     
  3. Claver

    Claver Новичок

    С нами с:
    2 фев 2014
    Сообщения:
    11
    Симпатии:
    0
    Да я плохо еще с php обращаюсь, читал уже, не помогло, показывало utf-8 и Windows-1251
    пробовал конвертировать, опять ничего, Покажите пожалуйста кто-нибудь работающий пример.
    Заранее Спасибо!

    Добавлено спустя 55 минут 6 секунд:
    Узнал по этой таблице http://habrahabr.ru/post/147843/ , что кодировка строки $str изначально была CP1251 а распозналась как CP866.
    Подскажите функцию, которая вернет правильный текст.
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.119
    Симпатии:
    1.245
    Адрес:
    там-сям
    хрень в том, что ответ зависит от того, в какой кодировке ты смотришь исходник.
    редактор, откуда ты скопировал строку, на какую кодировку настроен?

    если я введу этот текст в редакторе, настроенном на CP866, то в консоли windows выведется "купить букет цветов"
    Код (PHP):
    1. <?php
    2. echo iconv('CP1251', 'CP866', 'ъєяшЄ№ сєъхЄ ЎтхЄют');
     
  5. Claver

    Claver Новичок

    С нами с:
    2 фев 2014
    Сообщения:
    11
    Симпатии:
    0
    У меня создается эта строка и дальше записывается в файле utf8 Без BOM, то есть идет вырезание из url поискового запроса:
    Код (Text):
    1. if (stristr($referer, 'yandex.ru')) {$search = 'text=';$crawler = ' <sub><img src="img/icon_yandex.png" width="18" ></sub> Yandex';}
    2. // Расшифровка запроса
    3. if (isset($crawler)) {
    4. $phrase = urldecode($referer);
    5. mb_ereg($search.'([^&]*)', $phrase.'&', $phrase2);
    6. $phrase2 = $phrase2[1];}
    и именно с яндекса запросы на кириллице иногда становятся кракозябрами ($phrase2)...
    я думал написать условие: если в переменной встречается кракозябра, то конвертировать, но досих по не понял из чего во что.
    Редактор у меня notepad++.
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.119
    Симпатии:
    1.245
    Адрес:
    там-сям
    Код (PHP):
    1. <?php
    2. // кодировка этого файла - UTF-8.
    3. // страница будет восприниматься браузером как UTF-8
    4. header('Content-type: text/plain; charset=utf-8');
    5. echo iconv('CP1251', 'UTF-8', iconv('UTF-8', 'CP866', 'ъєяшЄ№ сєъхЄ ЎтхЄют'));
    то есть сначала мы исправим неверное перекодирование, после чего текст станет правильной строкой в 1251.
    затем сконвертим в utf-8 для вывода.

    Добавлено спустя 2 минуты 15 секунд:
    p.s. мне бы тоже хотелось иметь функцию автоматического приведения кириллического текста к UTF-8
     
  7. Claver

    Claver Новичок

    С нами с:
    2 фев 2014
    Сообщения:
    11
    Симпатии:
    0
    Большое человеческое Спасибо!!!)))