Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Проблем със енкодинга на RSS Парсер

Featured Replies

Здравейте на всички от kaldata.com! Имам един проблем, и мисля, че вие може да ми помогнете.

Имам сайт, използващ системата php-fusion и искам да инсталирам панел, който да парзва rss със последните новини от Kaldata.com. Намерих си нужния парсер и го инсталирах, но имам един проблем. Сайтът ми е с кодировка windows-1251, а rss feed-a също е с кодировка windows-1251. Проблема е такъв, че когато вкарам въпросния фийд, той излиза с кодировка utf-8 и така виждам само някакви йероглифи.

Разгледах добре парсващият файл, и в него никъде е указана някаква кодировка. Прочетох на няколко места, че при подобен случай, парсера автоматично използва кодировката utf-8. Та може ли някой да ми помогне да добавя в парсера функция за енкодинг?

Eто го парсера:

<?php

/*--------------------------------------------+

| RSS Parser version 2.00					 |

|---------------------------------------------|

| author: Scott Rutherford (surreal) © 2005   |

| web: http://www.maiden-city.co.uk		   |

| email: [email protected]			  |

|---------------------------------------------|

| Released under the terms and conditions of  |

| the GNU General Public License (Version 2)  |

+---------------------------------------------*/


class rss_parser  {

	var $parser;

	var $news = array();

	var $itemCount = -1;

	var $items = array();

	var $inItem = false;

	var $elName = '';

	var $data = '';

	var $cacheFile = '';



	function rss_parser() {


		$this->parser = xml_parser_create();


		xml_set_object($this->parser, $this);

		xml_set_element_handler($this->parser, "elementOpen", "elementClose");

		xml_set_character_data_handler($this->parser, "characterData");

	}


	function parse($file='', $num=0, $cacheTime=0) {




$cacheFile = INFUSIONS.'rss_parser_panel/cache/';

		$cacheFile .= 'cache_'.md5($file).'.txt';

		$this->cacheFile = $cacheFile;


		$this->getFile($file, $cacheTime);

		xml_parse($this->parser, $this->data);


		if(empty($num)) {

			$this->news['news'] = $this->items;

		} else {

			$this->news['news'] = array_slice($this->items, 0, $num);

		}


		return $this->news;

	}


	function checkCachedStatus($file='', $cacheTimeOut=0) {

		// get the time the cached file was last modified

		if(file_exists($this->cacheFile)) {

			$cacheTS = filemtime($this->cacheFile);

		} else {

			$cacheTS = 0;

		}


		$cacheExpire = $cacheTimeOut * 60 * 60;

		$cacheTime = $cacheTS + $cacheExpire;

		$cacheAge = time() - $cacheTS;

		$cacheRefresh = $cacheExpire - $cacheAge;


		if($cacheTime < time()) {	// cache has expired

			$this->news['info']['cache_last_update'] = 0;

			$this->news['info']['cache_next_update'] = $cacheExpire;

			return true;

		} else {						// cache has not expired

			$this->news['info']['cache_last_update'] = $cacheAge;

			$this->news['info']['cache_next_update'] = $cacheRefresh;

			return false;

		}


	}


	function getFile($file='', $cacheTime=0) {

		if($this->checkCachedStatus($file, $cacheTime)) {

			// get a new copy of the remote file

			if (!($fp = fopen($file, "r"))) {

				die("could not open source file");

			}

			while (!feof($fp)) {

				$this->data .= fgets ($fp, 4026);

			}

			fclose($fp);

			// write the data to the cache file

			$cfp = fopen($this->cacheFile, "w");

			fputs($cfp, $this->data);

			fclose($cfp);

		} else {

			// load the contents of the cached file

			$this->data = file_get_contents($this->cacheFile);

		}

	}


	function elementOpen($parser, $name, $attributes) {

		$this->elName = $name;


		if($name == 'ITEM') {

			$this->inItem = true;

			$this->itemCount ++;

		};

	}


	function characterData($parser, $data) {

		$this->data .= $data;

	}


   function elementClose($parser, $name) {

		if($name == 'ITEM') {

			$this->inItem = false;

		} else {

			if($this->inItem) {

				switch ($this->elName) {

					case 'TITLE':

						$this->items[$this->itemCount]['title'] = trim($this->data);

						break;

					case 'DESCRIPTION':

						$this->items[$this->itemCount]['description'] = trim($this->data);

						break;

					case 'LINK':

						$this->items[$this->itemCount]['link'] = trim($this->data);

						break;

				}

			} else {

				switch ($this->elName) {

					case 'TITLE':

						$this->news['info']['title'] = trim($this->data);

						break;

					case 'DESCRIPTION':

						$this->news['info']['description'] = trim($this->data);

						break;

					case 'LINK':

						$this->news['info']['link'] = trim($this->data);

						break;

					case 'LANGUAGE':

						$this->news['info']['lang'] = trim($this->data);

						break;

					case 'COPYRIGHT':

						$this->news['info']['copyright'] = trim($this->data);

						break;

					case 'LASTBUILDDATE':

						$this->news['info']['lastUpdate'] = trim($this->data);

						break;

				}

			}

			$this->data = '';

		}

	}

}


?>

  • Автор
Пробвай с това :

$chars="SET CHARACTER SET cp1251"; 

Примерно: mysql_query($chars);
+ ЦЪК
Това не върши никаква работа, но забелзях друго:
function rss_parser() {


		$this->parser = xml_parser_create();

Ето тук като го напиша така: $this->parser = xml_parser_create("utf-8") си бачка нормално, но

когато напиша $this->parser = xml_parser_create("windows-1251") ми излиза следната грешка:

Warning: xml_parser_create() [function.xml-parser-create]: unsupported source encoding "windows-1252" in parser.php on line 27

Това ме навежда на мисълта, че когато напиша windows-1251, парсера го смята за unsupported source encoding - т.е. неподдържан енкодинг, което е доста странно, като се има впредвид, че работи добре при utf-8.

  • Автор

Сега като пробвах $this->parser = xml_parser_create("ISO-8859-1") също си работи...но при windows-1251. Някой може ли да ме светне защо не става?

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.