1. Perl / Говнокод #5644

    −123

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    my %tbl;
    $tbl{'koi'}="БВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭШЩЯЬАСбвчздецъйклмнопртуфхжигюыэшщяьас";
    $tbl{'win'}="абвгдежзийклмнопрстуфхцчшщьыъэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
    ...
        if ($filename=~/^http:\/\//) {
            my ($header, $page)=getpage($filename);
            if ($page!~/\S/) {next;}
            if ($header=~/Charset.*koi/i) {
                eval("\$page=~tr/$tbl{'koi'}/$tbl{'win'}/");            
            }
            open(OUT, ">$tmpfile");
            print OUT $page;
            close OUT;
            open(NEWS, "$tmpfile");
        } else {
            open(NEWS, "$config::rubricsroot/$filename") || do {warn "Не могу открыть файл новостей: $!"; next;};
        }

    #5624 спровоцировал. Хотел запостить только перекодировку, но не смог удержаться, тут перлы в комплексе.
    1) Свой велосипед для получения странички по http через IO::Socket (это отдельная большая песня, может спою потом).
    2) Перекодировка из koi8r в cp1251, если нужно. Обратите внимание на элегантный eval.
    3) Подстановка результата для дальнейшей построчной обработки через временный файл.

    И не говорите мне о том, какой плохой язык PHP.

    Запостил: gegMOPO4, 11 Февраля 2011

    Комментарии (5) RSS

    • на этом месте должен быть пхп )))))
      Ответить
      • Боюсь, что на PHP такое трудновато будет соорудить.
        Ответить
        • Будь добр.
          Ответить
          • Примерно так:
            <?php
            $tbl['koi']="БВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭШЩЯЬАСбвчздецъйклмнопртуфхжигюыэшщяьас";
            $tbl['win']="абвгдежзийклмнопрстуфхцчшщьыъэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
            ...
                if (preg_match('/^http:\/\//', $filename)) {
                    list ($header, $page)=getpage($filename);
                    if (!preg_match('/\S/', $page)) {continue;}
                    if (preg_match('/Charset.*koi/i', $header)) {
                        $page=strtr($page, $tbl['koi'], $tbl['win']);
                    }
                    $out = fopen("$tmpfile", 'w');
                    fwrite($out, $page);
                    close($out);
                    $news = fopen("$tmpfile", 'r');
                } else {
                    $news = fopen("$config::rubricsroot/$filename", 'r');
                    if (!news) {echo "Не могу открыть файл новостей"; continue;}
                }
            Ответить
    • Где подарки?
      Ответить

    Добавить комментарий