Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2011, 21:54   #1
Furyon
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 24
По умолчанию Проблема с кодировкой

Здраствуйте.

В общих чертах так. Есть rss лента, я из ее по средствам php широко известным скриптом который напишу в конце извлекаю последнюю новость и и заношу ее в БД. Но почемуто по окончании скрипта от новости остается текст вроде такого - "летний жиС". Причем http://www.secnews.ru/russian/rss.php работает нормально, а если брать ленту например http://news.yandex.ru/Gorno-Altaysk/index.rss то все плохо. Из всех лент нормально только одна открывается, все остальные криво.

Вот пример что у меня получается http://gorno-altaysk.com/rss/read_rss.php

Прошу помощи.

Вот обещанный скрипт
<?PHP

/*********************************** ***********************
* Parse XML data into an array structure *
* Usage: array parse_rss ( string data ) *
*********************************** ***********************/
function parse_rss($reg_exp, $xml_data) {
preg_match_all($reg_exp, $xml_data, $temp);
return array(
'count'=>count($temp[0]),
'title'=>$temp[1],
'link'=>$temp[2],
'desc'=>$temp[3],
'pubdate'=>$temp[4]
);
}

/*********************************** ***********************
* Parse Array data into an HTML structure *
* Usage: string parse_rss ( array data ) *
*********************************** ***********************/
function output_rss($pattern, $rss_data) {
$temp = '';
/* for($i=$rss_data['count'] - 1; $i>-1; $i--) { */
$temp .= sprintf($pattern,
$rss_data['link'][0.5],
html_entity_decode($rss_data['title'][0.5]),
html_entity_decode($rss_data['desc'][0.5]),
html_entity_decode($rss_data['pubdate'][0.5])
);
/* }*/
return $temp;
}

/*********************************** ***********************
* Settings *
*********************************** ***********************/


/* $url = 'http://www.secnews.ru/russian/rss.php'; /

/* $url = 'http://gorno-altaisk.ru/index.php?format=feed&type=rss'; */

$url = 'http://news.yandex.ru/Gorno-Altaysk/index.rss';


$reg_exp = '#<item>.*?<title>(.*?)<\/title>.*?';
$reg_exp .='<link>(.*?)<\/link>.*?<description>';
$reg_exp .='(.*?)</description>.*?<pubDate>';
$reg_exp .= '(.*?)<\/pubDate>.*?<\/item>#si';


$pattern = '<a href="%s">%s</a><br>%s<br>Date:%s<hr>';

/*********************************** ***********************
* Main script *
*********************************** ***********************/
if ( $xml_data = file_get_contents($url) ) {
$rss_data = parse_rss($reg_exp, $xml_data);
echo output_rss($pattern, $rss_data);

}
/*********************************** ***********************
* The END *
*********************************** ***********************/
?>

Последний раз редактировалось Furyon; 12.04.2011 в 21:58.
Furyon вне форума Ответить с цитированием
Старый 12.04.2011, 22:31   #2
MrJenika
Форумчанин
 
Аватар для MrJenika
 
Регистрация: 07.09.2009
Сообщений: 361
По умолчанию

смотреть в какой кодировке rss и используя iconv() менять на нужную

Последний раз редактировалось MrJenika; 12.04.2011 в 22:33.
MrJenika вне форума Ответить с цитированием
Старый 12.04.2011, 22:49   #3
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

Либо используя мою функцию автоматом преобразовать в Win-1251 кодировку:
Код:
// Преобразовать из utf-8 в Windows-1251
function &UtfToWin($src)
{
    // Убрать заголовок UTF-8
    while (($src[0] == chr(0xEF)) && ($src[1] == chr(0xBB)) && ($src[2] == chr(0xBF))) $src = substr($src, 3);
    $src = mb_convert_encoding($src, "Windows-1251", "auto");
    return $src;
}
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 13.04.2011, 17:36   #4
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию ответ

вообще удобно использовать UTF8, кстати нужно ещё исключить недопустимые знаки потому как xml строго относится ко всем упущениям и ошибкам(в итоге невалидный RSS)!
PHP код:
 function for_xml($strin)
 {
   return @
iconv("utf-8""utf-8//IGNORE"$strin);
 } 
... проще некуда
8oOoRPM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с кодировкой serres PHP 0 05.04.2011 19:12
Проблема с кодировкой Abuhamed PHP 2 25.12.2010 21:47
проблема с кодировкой kirosin HTML и CSS 3 08.10.2010 15:11
проблема с кодировкой tred Помощь студентам 7 05.07.2010 13:55
Проблема с кодировкой motorway Microsoft Office Excel 3 03.07.2009 22:27