Получения нужной кодировки?

usergeyv

Знаток
Регистрация
5 Июл 2013
Сообщения
152
Реакции
25
Код в кодировке utf8 парсер торентов:
PHP:
<?php

@ob_start();
@ob_implicit_flush(0);

@error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
@ini_set('display_errors', false);
@ini_set('html_errors', false);
@ini_set('error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE);

define('DATALIFEENGINE', true);
define('ROOT_DIR', dirname(__FILE__).'/../..');
define('ENGINE_DIR', ROOT_DIR . '/engine');

@include (ENGINE_DIR.'/data/config.php');

function UTF8toCP1251($str)
{
    static $table = array("\xD0\x81" => "\xA8", // Ё
    "\xD1\x91" => "\xB8", // ё
    // украинские символы
    "\xD0\x8E" => "\xA1", // Ў (У)
    "\xD1\x9E" => "\xA2", // ў (у)
    "\xD0\x84" => "\xAA", // Є (Э)
    "\xD0\x87" => "\xAF", // Ї (I..)
    "\xD0\x86" => "\xB2", // I (I)
    "\xD1\x96" => "\xB3", // i (i)
    "\xD1\x94" => "\xBA", // є (э)
    "\xD1\x97" => "\xBF", // ї (i..)
    // чувашские символы
    "\xD3\x90" => "\x8C", // &#1232; (А)
    "\xD3\x96" => "\x8D", // &#1238; (Е)
    "\xD2\xAA" => "\x8E", // &#1194; (С)
    "\xD3\xB2" => "\x8F", // &#1266; (У)
    "\xD3\x91" => "\x9C", // &#1233; (а)
    "\xD3\x97" => "\x9D", // &#1239; (е)
    "\xD2\xAB" => "\x9E", // &#1195; (с)
    "\xD3\xB3" => "\x9F", // &#1267; (у)
    );
    return preg_replace('#([\xD0-\xD1])([\x80-\xBF])#se', 'isset($table["$0"]) ? $table["$0"] :
                       chr(ord("$2")+("$1" == "\xD0" ? 0x30 : 0x70))
                      ', $str);
    }




function search_torrent($query) {
    $ch = curl_init(); // инициализируем сеанс
    $title = trim(strip_tags($_REQUEST['title'])); // получаем пост

   
   
    curl_setopt($ch, CURLOPT_URL, 'http://rutor.co/search/' . $title); //указываем адрес страницы
    curl_setopt($ch, CURLOPT_USERAGENT, 'Opera 10.00'); //представляемся серверу браузером Opera версии 10.00
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //ответ сервера сохранять в переменную, а не на экран
    $res = curl_exec($ch); //выполняем запрос, результат в переменную $res
    if(!$res) {
        //для обработки ошибок curl
        $error = curl_error($curl).'('.curl_errno($curl).')';
    } else {
        $result = $res;
        $result = UTF8toCP1251($result);
    }

    $find2 = "";

    $p1 = strpos($result, "<table width=\"100%\"><tr class=\"backgr\">");
    $p2 = strpos($result, "</table><b>Страницы");
    $result = substr($result, $p1, $p2 - $p1);

    /* if title has a year
     * @param (string) $tpost
     * @return (string) year
     */
    function ifYear( $tpost ) {
        if ( preg_match( "/([1-2][0-9]{3})/", $tpost, $yy ) ) {
            return $yy[1];
        } else {
            return FALSE;
        }
    }
   
    preg_match_all('#<a href="magnet(.*?)"><img src="http://s.rutor.co/i/m.png" alt="M" /></a>.*?<a href="/torrent/(.[0-9]*)/.*?">(.*?)</a></td>.*?\n.*?<td align="right">(.*?)</td><td align="center"><span class="green"><img src="http://s.rutor.co/t/arrowup.gif" alt="S" />&nbsp;(.*?)</span>&nbsp;<img src="http://s.rutor.co/t/arrowdown.gif" alt="L" /><span class="red">&nbsp;(.*?)</span></td></tr>#is', $result, $find);

    $count = intval(count($find['1']));
    $i = -1;
    $find2 = "";
   
    $unsh = 0;
    $year = ifYear( $title );

    if ($year!==FALSE) {
        foreach ($find['4'] as $tor) {
            if ($unsh==5) break;

            if ( preg_match( "/$year/", $tor ) ) {
                $key = array_search( $tor, $find['4'] );
               
                $find['0'][] =array_unshift($find['0'], $find['0'][$key]);
                $find['1'][] =array_unshift($find['1'], $find['1'][$key]);
                $find['2'][] =array_unshift($find['2'], $find['2'][$key]);
                $find['3'][] =array_unshift($find['3'], $find['3'][$key]);
                $find['4'][] =array_unshift($find['4'], $find['4'][$key]);
                $find['5'][] =array_unshift($find['5'], $find['5'][$key]);
                $find['6'][] =array_unshift($find['6'], $find['6'][$key]);
                $find['7'][] =array_unshift($find['7'], $find['7'][$key]);
                $find['8'][] =array_unshift($find['8'], $find['8'][$key]);
                $find['9'][] =array_unshift($find['9'], $find['9'][$key]);           

                $unsh++;
            }
       
        }
   
    }
   
    while ($i < $count - 1) {
        if($is==5) break;
        $i++;
        $find['1'][$i] = str_replace("http://s.rutor.co/i/m.png", "/magnet.png", $find['1'][$i]);
        $find['1'][$i] = str_replace("magnet:", "magnet:", $find['1'][$i]);
        $is = $i + 1;
        $find2 .= <<<HTML
    <tr>
       
        <th>{$find['3'][$i]}</th>
        <th>{$find['4'][$i]}</th>
        <th>{$find['5'][$i]}</th>
        <th>{$find['6'][$i]}</th>
        <th><a href="http://rutor.co/download/{$find['2'][$i]}"><img title="Скачать без регистрации торрент" src="/download.png" alt="Скачать без регистрации торрент"></a> <a href="magnet{$find['1'][$i]}"><img src="/images/magnet.png" alt="M" title="Примагнитится"/></a></th>
    </tr>
HTML;
    }

    if (!$find2 or $find2 == "") {
        $finds = "<br><br><p style=\"text-align: center;\"><span style=\"font-size: medium;\"><strong><span style=\"color: #ff0000;\">Внимание:</span></strong> Не удалось отобразить раздачу! Обновите страницу!</span></p><br><br>";
    } else {
        $finds = <<<HTML


    <table style="width:100%;" class="restable">
        <thead>
            <tr>
               
                <th style="width:500px;">Название торрент раздачи<span>&nbsp;&nbsp;</span></th>
                <th style="width:40px;">Размер <span>&nbsp;&nbsp;</span></th>
                <th style="width:50px;">Сиды <span>&nbsp;&nbsp;</span></th>
                <th style="width:50px;">Пиры <span>&nbsp;&nbsp;</span></th>
                <th style="width:50px;">Скачать <span>&nbsp;&nbsp;</span></th>
            </tr>
        </thead>
        <tbody>
        {$find2}
        </tbody>
    </table>
HTML;
    }

    return ($finds);
}

@header("Content-type: text/html; charset=" . $config['charset']);

echo search_torrent($title);

?>

а, результат :

Screenshot_1.png
Как исправить?
 
Вписать 'UTF-8' в $config['charset']
Или написать напрямую
PHP:
@header("Content-type: text/html; charset=UTF-8");
 
$result = UTF8toCP1251($result);
надо заменить на
PHP:
$result = iconv('windows-1251', 'UTF-8', $result);
Rutor отдает данные в windows-1251
 
$result = UTF8toCP1251($result);
надо заменить на
PHP:
$result = iconv('windows-1251', 'UTF-8', $result);
Rutor отдает данные в windows-1251
отдает ошибку
Код:
Внимание: Не удалось отобразить раздачу!
 
Последнее редактирование:
Назад
Сверху