Autor Zpráva
Watchick
Profil
Zdravím,
dělám RSS čtečku a potýkám se s problémem...
když načítám z více zdrojů na jednu stránku http://feeds2.feedburner.com/testynanic?format=xml, který má kódování UTF-8
a
z druhého http://seznam.sblog.cz/rss.xml, který má kódování ISO-8859-2.

Jak to mohu zkoubit dohromady (nejlépe na stránku s kódováním windows-1250?)

Předem díky za rady
Watchick
Joker
Profil
Watchick
Bude potřeba převádět kódování, aby bylo všude stejné.
V PHP na to je knihovna iconv

Jinak bych doboručil jako to "jednotné" kódování UTF-8, pokud není zásadní důvod použít jiné.
Watchick
Profil
Joker
a nestačilo by něco jako nejprve načíst data z jedné stránky a uložit je do databáze, pak další a další, a pak je všechny z databáze z5tně načíst?nebo tam bude také problém s kódováním?
Joker
Profil
Watchick
Kódování pro komunikaci s databází nastavujete přes SET NAMES. Takže byste před každým vložením musel nastavovat správné kódování. No a to samé před každým výběrem z databáze, aby se to skriptu posílalo ve správném kódování.

Takže záleží- pokud to tak jako tak máte v databázi, tak samozřejmě nastavovat SET NAMES.
Jestli chcete použít databázi jen kvůli změně kódování, tak to bych nedělal.
Watchick
Profil
no IMHo mi databáze přijde jako nejlepší řešení už proto, že nevím jak bych si s instalací a samotnými funkcemi iconv poradil a navíc pokud čtečka bude na nějakých frekventovanějších stránkách, tak mi výpis z databáze a aktualizace údajů jednou za 5 minut přijde optimáln řešení
Watchick
Profil
A co se týče SET NAMES, tak to se před daný příkaz, který chci provádět dá:
mysql_query("SET NAMES 'utf8'");

a poté následuje, INSERT, nebo UPDATE,
a poté musím z5 změnit na výchozí jazyk, který mám nastavený v meta tagu?
tedy v mém případě:
mysql_query("SET NAMES 'utf8'");
mysql_query("INSERT INTO rss (nazev,nadpis,popis,link,time,update) VALUES ('".$nazev[$o]."','".$nadpis[$o][$i]."','".$popis[$o][$i]."','".$link[$o][$i]."','".$time[$o][$i]."','".time()."')");
mysql_query("SET NAMES 'windows1250'");


a nevadi, pokud mam tabulku s takovymto kodovanim: ? je to takhle nějak dobře?
CREATE TABLE `rss` (
  `id` int(11) NOT NULL auto_increment,
  `url` varchar(50) NOT NULL,
  `nazev` varchar(100) NOT NULL,
  `nadpis` varchar(100) NOT NULL,
  `popis` text NOT NULL,
  `link` varchar(100) NOT NULL,
  `time` varchar(20) NOT NULL,
  `update` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `url` (`url`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Joker
Profil
Watchick
V tom případě je databáze OK, šlo mi jen o to, aby se databáze nepoužívala čistě jen kvůli změně kódování (tzn. že by to byl jediný účel její existence).

ad SET NAMES: Vpodstatě správně.
Před INSERT se musí dát: SET NAMES *kódování, v jakém je zdroj*

A potom ne za INSERT, ale možná raději před SELECT bych dal SET NAMES *kódování, v jakém je stránka*

Co se týká tabulky, time a update bych možná dal DATETIME, ne VARCHAR.
Watchick
Profil
a jestli to chápu správně tak to 1. SET NAMES převede data do UTF-8 (ve kterém jsou uloženy v tabulce)
a následné SET NAMES u SELECTu zvolí kódování ve kterém je díky SELECTu vytáhnu?

Takže vlastně pokud mam stránku ze které načítám v ISO, tak to přes SET NAMES nastavím do databáze správně, ale pak při výstupu již SET NAMES používat nemusím, protože jsou to již data, která se chovají naprosto stejně jako data, která vkládám bez SET NAMES, takže již při výtahu v mém případě SET NAMES používat nemusím?

Joker
Díky moc... většinou se mi nestává, že bych z diskuze opravdu něco pochopil :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: