Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как перекодировать запрос с windows-1251, а в utf-8?
 
 автор: Keleon   (03.03.2009 в 14:24)   письмо автору
 
 

Есть скрипт гороскопа, но результаты выводятся в кодировке windows-1251 и криво показываются на странице. Подскажите, пожалуйста, как сделать так, чтобы результаты запроса выводились не в windows-1251, а в utf-8?

Вот код скрипта:

<?

if(!defined('DATALIFEENGINE'))
{
  die(
"Hacking attempt!");
}
$tpl->load_template('horoscope.tpl');
$title "Овен";
$pic "<img src=\"{THEME}/images/zodiac/aries.gif\" marginwidth=\"5\">";
//$sign="aries";


switch ($_GET['sign']) {
    
    
    case 
"aries" :
        
$act=1;
        
$pic "<img src=\"{THEME}/images/zodiac/aries.gif\" marginwidth=\"5\">"$title "Овен";
        break;
        
    case  
"taurus":    
        
$act=2;
        
$pic "<img src=\"{THEME}/images/zodiac/taurus.gif\" marginwidth=\"5\">"$title "Телец";
        break;
        
    case 
"gemini" :
        
$act 3$pic "<img src=\"{THEME}/images/zodiac/gemini.gif\" marginwidth=\"5\">"$title "Близнецы";
        
        break;

    case 
"cancer" :
        
$act 4$pic "<img src=\"{THEME}/images/zodiac/cancer.gif\" marginwidth=\"5\">"$title "Рак";
        break;
        
    case 
"leo" :
        
$act 5$pic "<img src=\"{THEME}/images/zodiac/leo.gif\" marginwidth=\"5\">"$title "Лев";
        break;

    case 
"virgo" :
        
$act 6$pic "<img src=\"{THEME}/images/zodiac/virgo.gif\" marginwidth=\"5\">"$title "Дева";
        break;
        
    case 
"libra" :
        
$act 7$pic "<img src=\"{THEME}/images/zodiac/libra.gif\" marginwidth=\"5\">"$title "Весы";
        break;

    case 
"scorpio" :
        
$act 8$pic "<img src=\"{THEME}/images/zodiac/scorpio.gif\" marginwidth=\"5\">"$title "Скорпион";
        break;
        
    case 
"sagittarius" :
        
$act 9$pic "<img src=\"{THEME}/images/zodiac/sagittarius.gif\" marginwidth=\"5\">"$title "Стрелец";
        break;

    case 
"capricorn" :    
        
$act 10$pic "<img src=\"{THEME}/images/zodiac/capricorn.gif\" marginwidth=\"5\">"$title "Козерог";
        break;
        
    case 
"aquarius" :
        
$act 11$pic "<img src=\"{THEME}/images/zodiac/aquarius.gif\" marginwidth=\"5\">"$title "Водолей";
        break;
        
    case 
"pisces" :
        
$act 12$pic "<img src=\"{THEME}/images/zodiac/pisces.gif\" marginwidth=\"5\">"$title "Рыбы";
        break;
}

$time $_GET['time'];

if (
$_GET['sign'] == ""
        {
    
$sign "aries";
        }
        
else     {
    
$sign $_GET['sign'];
        }





$open file_get_contents("http://horo.mail.ru/prediction.html?sign=$act&time=$time""r");

if (
$time == 'month') {
preg_match_all('|<div id="tm_month">(.*)</div>|Uis'$open$elements);

    
foreach(
$elements[1] as $id=>$horoscope)
    {
        
$hor .= $horoscope;
        
    }    
}
else 
{
preg_match_all('|<p>(.*)</p>|Uis'$open$elements);

    
foreach(
$elements[1] as $id=>$horoscope)
    {
        
$hor .= $horoscope;
        
    }
}
if(isset(
$time) && $time != "")
    {
        if (
$config['allow_alt_url'] == "yes")
            {
                
$linkhor  .= "<a href=\"/horoscope/$sign/\">Гороскоп на сегодня</a>";
            }
        else
            {
                
$linkhor  .= "<a href=\"/index.php?do=horoscope&sign=$sign\">Гороскоп на сегодня</a>";
            }
    }
else
    {
        if (
$config['allow_alt_url'] == "yes")
            {
                
$linkhor .= "<a href=\"/horoscope/$sign/yesterday.html\">< Вчерашний Гороскоп</a> | <a href=\"/horoscope/$sign/tomorrow.html\">Гороскоп на завтра </a> | <a href=\"/horoscope/$sign/week.html\">Гороскоп на неделю </a> | <a href=\"/horoscope/$sign/month.html\">Гороскоп на месяц </a> | <a href=\"/horoscope/$sign/year.html\">Гороскоп на год ></a>";
            }
        else
            {
                
$linkhor .= "<a href=\"/index.php?do=horoscope&sign=$sign&time=yesterday\">< Вчерашний Гороскоп</a> | <a href=\"/index.php?do=horoscope&sign=$sign&time=tomorrow\">Гороскоп на завтра </a> | <a href=\"/index.php?do=horoscope&sign=$sign&time=week\">Гороскоп на неделю </a> | <a href=\"/index.php?do=horoscope&sign=$sign&time=month\">Гороскоп на месяц </a> | <a href=\"/index.php?do=horoscope&sign=$sign&time=year\">Гороскоп на год ></a> ";
            }
    }
if(!
$hor)
    {
        
$conhor  .= "<br />Гороскопа пока-что нету";
    }

if (
$config['allow_alt_url'] == "yes")
    {
        
$self_link "<a href=\"/horoscope/\">Гороскоп</a>";
        
$blockhor .= 'Тут HTML';
    }
else
    {
        
$self_link "<a href=\"/index.php?do=horoscope\">Гороскоп</a>";
        
$blockhor .= 'Тут HTML';
    }

$tpl->set('{pic}',$pic);
$tpl->set('{zodiac}',$title);
$tpl->set('{blockhor}',$blockhor);
$tpl->set('{horoscope}',$hor);
$tpl->set('{links}',$linkhor);
$tpl->set('{self}',$self_link);
$tpl->compile('content');
$tpl->clear();
?>

  Ответить  
 
 автор: sim5   (03.03.2009 в 14:49)   письмо автору
 
   для: Keleon   (03.03.2009 в 14:24)
 

Воспользуйтесь функцией iconv.

  Ответить  
 
 автор: Keleon   (03.03.2009 в 16:18)   письмо автору
 
   для: sim5   (03.03.2009 в 14:49)
 

Не могли бы вы показать как это делается на данном конкретном примере?

  Ответить  
 
 автор: sim5   (03.03.2009 в 16:31)   письмо автору
 
   для: Keleon   (03.03.2009 в 16:18)
 

Нет, я не буду переписывать ваш пример, да и незачем, из описания функции и так все понятно. Не понятно другое. Если ваш сайт, это все UTF-8, и только эта страница 1251, то не проще ли ее и подготовить в этой кодировке.

  Ответить  
 
 автор: Keleon   (03.03.2009 в 16:40)   письмо автору
 
   для: sim5   (03.03.2009 в 16:31)
 

Да, только эта страница в 1251. Как подготовить не знаю. Нет специального образования. Просто парсер видимо выдает данные в 1251, поэтому они так и отображаются на вебстранице.

  Ответить  
 
 автор: Keleon   (03.03.2009 в 19:21)   письмо автору
 
   для: Keleon   (03.03.2009 в 16:40)
 

Кто-нибудь может помочь хоть на платной основе?

Просто помощь некоторых людей - это не совсем помощь. Ведь если ты идешь к потрному зашить себе пальто, он же не посылает тебя в магазин иголок и ниток, чтобы ты это сделал сам.

  Ответить  
 
 автор: Николай2357   (03.03.2009 в 19:54)   письмо автору
 
   для: Keleon   (03.03.2009 в 19:21)
 

Откройте файл в редакторе, хоть в блокноте, измените кодировку и перезапишите. Всего то и делов.

  Ответить  
 
 автор: Keleon   (03.03.2009 в 21:02)   письмо автору
 
   для: Николай2357   (03.03.2009 в 19:54)
 

Николай, так не получается. Весь HTML в файле открывается в кодировке UTF8, а та часть, которая парсится и идет с другого сайта - выводится только в 1251.

  Ответить  
 
 автор: Trianon   (03.03.2009 в 21:15)   письмо автору
 
   для: Keleon   (03.03.2009 в 21:02)
 

$open = ivconv("Windows-1251", "UTF-8", 
    file_get_contents( "http://horo.mail.ru/prediction.html?sign=$act&time=$time" ) );

  Ответить  
 
 автор: Keleon   (03.03.2009 в 22:19)   письмо автору
 
   для: Trianon   (03.03.2009 в 21:15)
 

Не получилось:
Fatal error: Call to undefined function ivconv() in /var/www/user/data/www/name.ru/engine/modules/horoscope.php on line 177

  Ответить  
 
 автор: Trianon   (03.03.2009 в 22:30)   письмо автору
 
   для: Keleon   (03.03.2009 в 22:19)
 

это крайне странная ситуация.
Как правило, в php эта функция определена,
поскольку на хостингах, где обычно одна из *nix-платформ, её включают при компиляции php.
На windows-платформах в php5 она входит в ядро.

Сервер с utf-8 контентом без нее, по-моему, вообще нонсенс.

  Ответить  
 
 автор: Keleon   (03.03.2009 в 22:48)   письмо автору
 
   для: Trianon   (03.03.2009 в 22:30)
 

А может вот так:

$open = ivconv("Windows-1251", "UTF-8",  "file_get_contents( "http://horo.mail.ru/prediction.html?sign=$act&time=$time" )");


?

В данном случает возникает другая ошибка:
Parse error: syntax error, unexpected T_STRING...


А сервер VDS. PHP5. Дело, наверное, не в сервере.

  Ответить  
 
 автор: Trianon   (03.03.2009 в 23:12)   письмо автору
 
   для: Keleon   (03.03.2009 в 22:48)
 

<?php 
  phpinfo
(); 
?>

что выдает?
Отклик лучше бы прикрепить в виде архива.

>А может вот так:
нет. не стоит.

  Ответить  
 
 автор: Николай2357   (03.03.2009 в 23:14)   письмо автору
 
   для: Keleon   (03.03.2009 в 22:48)
 

Все на много прозаичнее. Нужно не ivconv а iconv

  Ответить  
 
 автор: Trianon   (03.03.2009 в 23:16)   письмо автору
 
   для: Николай2357   (03.03.2009 в 23:14)
 

Ох ты ж... и вправду опечатался...
$open = iconv(
.....

  Ответить  
 
 автор: Keleon   (03.03.2009 в 23:40)   письмо автору
 
   для: Trianon   (03.03.2009 в 23:16)
 

Большое-большое спасибо! Наконец-то все заработало. Всего вам самого наилучшего, добрые люди.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования