HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

php, iconv, utf-8 - обрезает контент
  #1  
Старый 28.09.2009, 11:50
rcc0023
Участник форума
Регистрация: 03.07.2008
Сообщений: 177
С нами: 9398085

Репутация: 11
По умолчанию php, iconv, utf-8 - обрезает контент

PHP код:
<?php
set_time_limit
(3600);

$url=array( 
    
        
'11723' => 'Брно'
        
'11414' => 'Карловы Вары'
        
'11418' => 'Марианские Лазни'
        
'11448' => 'Пльзень'
        
'11518' => 'Прага'
        
'11790' => 'Черный Дул'
        
'11412' => 'Яхимов' 
);

foreach( 
$url as $k=>$v ){
echo 
'тип: '.$url[$k].'<br>';
    
$str=file_get_contents'http://weather.yandex.ru/' $k '/details/' );
    
preg_match"'(<table class=\"b-forecast-details\">.+<\/table>)'is"$str$ar );
    if(
$k==11414){echo iconv'UTF-8''CP1251'$ar[1] );exit;}
    if ( isset( 
$ar[1] ) ) {
    echo 
'загружаем...<br>';
        
$ar[1]=str_replace('http://img.yandex.net/i/weather/wind/','/images/weather/',$ar[1]);
        
$ar[1]=str_replace('http://img.yandex.net/i/weather/moon/','/images/weather/',$ar[1]);
        if(
file_put_contentsdirnamedirname__FILE__ ) ) . '/weather/' $k '.html'iconv'UTF-8''CP1251'$ar[1] ) ))echo 'сохраняем...<br>';
    }
}
?>
Почему на странице http://weather.yandex.ru/11414/details/ функция iconv( 'UTF-8', 'CP1251', $ar[1] ); удаляет пол контента?
 
Ответить с цитированием

  #2  
Старый 28.09.2009, 12:07
Kaimi
Познавший АНТИЧАТ
Регистрация: 23.08.2007
Сообщений: 1,237
С нами: 9851426

Репутация: 1676


По умолчанию

Используй
PHP код:
function utf8_to_cp1251($s)
        {
            for (
$c=0;$c<strlen($s);$c++)
            {
               
$i=ord($s[$c]);
               if (
$i<=127$out.=$s[$c];
                   if (
$byte2){
                       
$new_c2=($c1&3)*64+($i&63);
                       
$new_c1=($c1>>2)&5;
                       
$new_i=$new_c1*256+$new_c2;
                   if (
$new_i==1025){
                       
$out_i=168;
                   } else {
                       if (
$new_i==1105){
                           
$out_i=184;
                       } else {
                           
$out_i=$new_i-848;
                       }
                   }
                   
$out.=chr($out_i);
                   
$byte2=false;
                   }
               if ((
$i>>5)==6) {
                   
$c1=$i;
                   
$byte2=true;
               }
            }
            return 
$out;
        } 
 
Ответить с цитированием

  #3  
Старый 28.09.2009, 13:24
rcc0023
Участник форума
Регистрация: 03.07.2008
Сообщений: 177
С нами: 9398085

Репутация: 11
По умолчанию

исказило часть символов..
 
Ответить с цитированием

  #4  
Старый 30.09.2009, 09:49
rcc0023
Участник форума
Регистрация: 03.07.2008
Сообщений: 177
С нами: 9398085

Репутация: 11
По умолчанию

еще актуально!
 
Ответить с цитированием

  #5  
Старый 30.09.2009, 10:37
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
С нами: 10021597

Репутация: 905


По умолчанию

Забейте на iconv и попробуйте
PHP код:
string mb_convert_encoding  string $str  string $to_encoding  [, mixed $from_encoding  ] ) 
 
Ответить с цитированием

  #6  
Старый 30.09.2009, 13:08
WNZRS
Участник форума
Регистрация: 03.09.2009
Сообщений: 179
С нами: 8782736

Репутация: 90
По умолчанию

iconv('utf-8', 'cp1251//IGNORE', $result);
если это исправит, значит обрезалось из-за символа,которого нет в cp1251, я с таким столкнулся когда парсил википедию
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PSalm69 Избранное 273 13.02.2016 01:24
Books PHP FRAGNATIC PHP 186 21.02.2010 02:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.