Autor | Zpráva | ||
---|---|---|---|
Stepanka Profil * |
#1 · Zasláno: 5. 5. 2008, 22:18:19
Ahoj,
potřebovala bych nastavit správné zobrazování češtiny u výpisu z RSS kanálů jiných webů. Používám Smarty šablony, a už jsem vyzkoušela snad všechno. Mám: 1) Nastavené kódování v hlavičce šablony index.html na UTF-8. Na prvním řádku mám pro jistotu i <?xml version="1.0" encoding="UTF-8"?> 2) V souboru index.php mám jako první řádek <?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?>, což jsem se dočetla zde v jiném vlákně. 3) V souboru lastRSS.php mám: var $default_cp = 'UTF-8'; 4) I když píšu kód v Deramweaveru, vím, že ho musím někdy znovu-uložit např. v PSPadu, právě kvůli češtiny.. To jsem udělala taky. Nevíte někdo, prosím, kde by mohla být ještě chyba? Předem moc děkuju za jakékoliv návrhy, nápady a odpovědi. |
||
Stepanka Profil * |
#2 · Zasláno: 5. 5. 2008, 22:19:58
Ještě jsem chtěla dodat, že místo veškeré diakritiky mám otazníky.. (i když nevím nakolik je tahle informace důležitá..)
|
||
Měsíček Profil |
#3 · Zasláno: 5. 5. 2008, 22:21:17
"I když píšu kód v Deramweaveru, vím, že ho musím někdy znovu-uložit např. v PSPadu, právě kvůli češtiny.. To jsem udělala taky. "
Stačí uložit klidně i v Dreamweaveru, ale se stejným kódováním takže ne ani ANSI, ani Unicode, ale UTF-8. V tom případě se musí shodovat kódování hlavičky, xml prologu + ještě kódování souboru. |
||
starenka Profil |
#4 · Zasláno: 6. 5. 2008, 01:34:06
a databaze?
|
||
Stepanka Profil * |
#5 · Zasláno: 6. 5. 2008, 10:07:57
Měsíček
Nene... Opravdu to tak je, ze Dreamweaver má defaultně uložené nějaké kódování (tuším windows-1250) a i když člověk zadá do hlavičky něco jiného, někdy se stane, že na to Dreamweaver nereaguje. To mám odzkoušené snad stokrát a ještě vícekrát jsem to někde dočetla... Ale není to nic proti Tobě ;-) .. Jinak můj problém to stejně neřeší, protože kódování souboru je správně nastaveno na UTF-8, kódování hlavičky také a xml prolog jsem kopírovala v prvním příspěvku - taky tam zadávám UTF-8. Zdá se mi to zvláštní, není už nikde jinde místo, kam by to kódování šlo ještě vecpat.. Nechápu to.. starenka Databázi mám také v UTF-8. Navíc po připojení k databázi zadávám ještě: mysql_query("SET NAMES 'UTF-8'"); což by mělo taky pomoct ke správnému zobrazování češtiny.. Ale jaksi mám pořád všude otazníky :-( |
||
starenka Profil |
#6 · Zasláno: 6. 5. 2008, 11:03:46
ono set names neni vse, spravne by bylo jeste nadefinovat kodovani klienta a prenosu.. treba takhle
private function setEncoding() { if(@mysql_query('SET character_set_results=utf8',$this->connection_id) && @mysql_query('SET character_set_connection=utf8',$this->connection_id) && @mysql_query('SET character_set_client=utf8',$this->connection_id)) { return true; } else { return false; } } ale bojim se, ze to tim nebude... jen tak pro sichr, kdyz se podivas pres phpmyadmina je cestina v db v pohode? nezbejva ti nic jinyho nez to zdebugovat a podivat se, kde se to posira po ceste (sic!). gl starenka |
||
starenka Profil |
#7 · Zasláno: 6. 5. 2008, 11:05:10
jeste ja: smarty neznam, ale neni mozny, ze si to tam nekde ve vystupu v sablonach nekde projizdi iconv na nejaky zapadacky kodovani?
|
||
Stepanka Profil * |
#8 · Zasláno: 6. 5. 2008, 15:06:21
starenka
ehm.. co je to zdebugovat? |
||
starenka Profil |
#9 · Zasláno: 6. 5. 2008, 16:17:23
pouzit debugger ( http://www.thierryb.net/pdtwiki/index.php?title=Using_PDT_:_Installati on_:_Installing_the_Zend_Debugger http://en.wikipedia.org/wiki/Debugger ) to znamena (mimo jine) mit moznost prochazet skript radek po radku a videt vsechny hodnoty promennych, vidis kudy skript jde atd....
pokud nemas tak vytipovat mozny mista zmeny dat a echovat a echovat.... porad jsi jeste neodpovedela: v databazi pres phpmyadmina je cestina v poradku? |
||
Stepanka Profil * |
#10 · Zasláno: 6. 5. 2008, 16:37:20
starenka
Jo, promiň, v databázi přes PHPMyAdmina je čeština naprosto v pořádku. Zkusím ten debugger, ale nevím, jestli z jeho pohledu bude zobrazení otazníku bráno jako chyba.. Ale každopádně děkuju za rady! |
||
starenka Profil |
#11 · Zasláno: 6. 5. 2008, 16:53:48
no takhle to nefunguje...chyby to za tebe nehleda :) proste ti to umozni krokovat skript a ty budes videt obsah promennych.. tudiz snadno odhalis, jestli ti to prislo spatne uz db, nebo kde presne se ti po..skodilo :)
|
||
Stepanka Profil * |
#12 · Zasláno: 6. 5. 2008, 17:22:03
starenka
Jo, já to chápu :-) Ale teď jsem z toho trochu jelen. Zkusila jsem tam zadat jiny zdroj na RSS kanál, a čeština se zobrazila pěkně. Když tam dám třeba http://www.lidovky.cz/export/rss.asp?c=ln_lidovky, tak mám místo diakritiky otazníky, ale když zvolím jako RSS zdroj třeba http://rss.ceska-media.cz/, nebo http://www.novinky.cz/rss/, tak se to zobrazí normálně s háčkama a čárkama... Čím to může být? |
||
vertigo4 Profil |
#13 · Zasláno: 6. 5. 2008, 17:23:58 · Upravil/a: vertigo4
Stepanka
protože mají různá kodování... |
||
starenka Profil |
#14 · Zasláno: 6. 5. 2008, 18:21:59
aha az ted to ctu poradne... ty negenerujes svoje, ale nacitas cizi.... no tak to zrejmne bude chyba v tom, ze ty rss co ti nejdou bud nemaji definovany kodovani, nebo to lastrss blbe prevadi iconvem... (jen hadam)
|
||
Stepanka Profil * |
#15 · Zasláno: 6. 5. 2008, 20:52:26
Aha, už jsem si našla, co je to iconv, a pomohlo mi to. Třeba "title" RSS kanálu se začalo zobrazovat pěkně česky. Ale jednotlivé položky (odkazy na zprávy) vytvářím až v té šabloně, což není php kód, ale html dokument a tak nevím, jak tam ten iconv nacpat. Prošla jsem www.smarty.net, a nikde jsem to nenašla, tak to asi neexistuje. Nebo už jste se s tím někdy někdo potkal? Děkuju.
|
||
Stepanka Profil * |
#16 · Zasláno: 6. 5. 2008, 20:58:56
starenka
Jo, chápeš to správně, že načítám cizí RSS. Děkuju za rady ;-) |
||
starenka Profil |
#17 · Zasláno: 6. 5. 2008, 21:27:55
nz. no kdysi sem v tom neco delal, tak jsem se podival. je to v nejaky fci v souboru v /smarty/plugins. je ale dost mozny, ze uz se to nachazi nekde jinde... ten projekt je par let starej :)
|
||
Stepanka Profil * |
#18 · Zasláno: 6. 5. 2008, 21:55:32
starenka
Právě jsem prošla všechny soubory v /smarty/plugins, ale kódování se žádný netýkal.. Přitom mi tam určitě žádný nechybí.. Nebo myslíš, že by ten iconv šel nasáčkovat do té funkce v PHP kódu? Že bych to nedávala do té šablony.. Ta funkce vypadá takhle: function smarty_function_lastrss_load($params, &$smarty) { if ($params['file'] == '') { $smarty->trigger_error("lastrss_load: missing 'file' parameter"); return; } if ($params['assign'] == '') { $smarty->trigger_error("lastrss_load: missing 'assign' parameter"); return; } require_once('./libs/classes/lastRSS.php'); if(class_exists('lastRSS')) { $_rss =& new lastRSS(); $_rss->cache_dir = 'libs/smarty/cache'; $_rss->cache_time = 3600; // one hour if($rs = $_rss->get($params['file'])) { $smarty->assign($params['assign'], $rs); } else { $smarty->trigger_error("lastrss_load: unable to read '{$params['file']}'"); } } else { $smarty->trigger_error("lastrss_load: unable to load lastRSS library"); } } Já už to zkoušela nacpat všude možně kolem toho řádku $smarty->assign($params['assign'], $rs);, ale pak mi asi došlo, že je to blbost, protože v tomhle skriptu ty jednotlivé odkazy ještě neexistují, protože se generují až v té šabloně... nebo nemám pravdu? PS: Ty jsi kluk stařenko? :-) |
||
starenka Profil |
#19 · Zasláno: 6. 5. 2008, 22:11:49
kluk: jsem :)
no intuitivne bych rekl ze data uz budes mit nasackovany v promenny $rs... koukni se co je v ni... to lastrss je tohle? http://lastrss.oslab.net/ ? porad me udivuje, ze to nekonvertuje samo a dobre... pokud je to ono... nechej si vypsat data pred a po tehle radce ( $out[1] = iconv($this->rsscp, $this->cp.'//TRANSLIT', $out[1]); ), popripade se koukni jake jsou ty prommene ($this->cp a $this->rsscp) a jestli jsou v poradku (kodovani v xml rsska a tocje default) |
||
Stepanka Profil * |
#20 · Zasláno: 6. 5. 2008, 22:46:49
V proměnné $rs je pole, které zobrazuje například toto:
echo $rs; ...zobrazí Array echo $rs['title']; ... zobrazí Lidovky.cz - zpravodajsk� server Lidov�ch novin echo $rs['items']; ... zobrazí Array echo $rs['items']; ... zobrazí prázdný řádek echo $rs['description']; ... zobrazí Aktu�ln� zpravodajstv� z rubrik domov, zahrani��, ekonomika / byznys, sport, bydlen�, auto, Evropsk� unie, v�da. Koment��e. Nevím jaké jiné parametry zadat pro to pole, aby vyhodilo konkrétní odkaz. Ty bys věděl? Já bych řekla, že v té proměnné $rs ty jednotlivé odkazy nejsou. Ty se zobrazí až pomocí této šablony index.html: {lastrss_load file="http://www.lidovky.cz/export/rss.asp?c=ln_lidovky" assign="phpnews"} {section name=rss loop=$phpnews.items} <a href="{$phpnews.items[rss].link}">{$phpnews.items[rss].title}</a><br /> {/section} Jinak lastrss.php je to, co jsi poslal v odkaze. A když po téhle řádce ( $out[1] = iconv($this->rsscp, $this->cp.'//TRANSLIT', $out[1]); ) zadám echo $out[1]; vyhodí to spoustu keců o daném serveru, ale taky s chybama - tzn. s otazníkama. Příští rok na Ježíška si budu přát, aby měly všechny servery jedno jasně dané kódování :-) |
||
Stepanka Profil * |
#21 · Zasláno: 6. 5. 2008, 22:53:26
Jo jinak na začátku toho souboru lastrss.php mám definované tyhle proměnné:
var $default_cp = 'UTF-8'; var $CDATA = 'nochange'; var $cp = ''; var $items_limit = 10; var $stripHTML = False; var $date_format = ''; Zkoušela jsem dát UTF-8 i do té třetí proměnné $cp, ale efekt žádný.. |
||
Stepanka Profil * |
#22 · Zasláno: 6. 5. 2008, 23:12:43
starenka
Jsi moc hodná stařenka, že mi tady tak pomáháš.. |
||
starenka Profil |
#23 · Zasláno: 7. 5. 2008, 00:14:22
a vypsala sis jeste ty promenne $this->rsscp a $this->cp ??? az budem vedet co tam je... muzem hodit do cisteho skriptu zkusebni konverzi s temi parametry a zjistit jeslti to neposira ten iconv... (on totiz rad nekdy funguje spatne)
jinak kdyz mas pole a v nem pole je lepisi vypisovat pomoci print_r napriklad takto: echo '<pre>'; print_r($promenna); echo '</pre>'; |
||
starenka Profil |
#24 · Zasláno: 7. 5. 2008, 00:16:56 · Upravil/a: starenka
jinak mi prosim posli url toho feedu.. zkusim to u sebe... takle je to dost napytel ;))
|
||
Stepanka Profil * |
#25 · Zasláno: 7. 5. 2008, 08:32:42
starenka
Proměnné $this->rsscp a $this->cp jsem vypsat samozřejmě zkoušela, ale nic mi to neukazuje. Nevím, jestli je vypisuju správně, když jsou tam ty šipky (->)... Dala jsem prostě echo $this->rsscp; echo $this->cp; a na stránce mi to neukázalo nic navíc. Když dám echo $rsscp; a echp $cp;, taky mi to nic nezobrazí... Vypisuju je nějak špatně? |
||
Stepanka Profil * |
#26 · Zasláno: 7. 5. 2008, 08:41:03
starenka
Jo a mockrát děkuju za tu radu, jak vypsat celé pole. Ani by mě nenapadlo, že to takhle jde :-) Pomohlo mi to zjistit "cestu" k jednotlivým odkazům na zprávy. Je to: for ($i=0; $i<=10; $i++) { echo $rs['items'][$i]['title']."<br>"; } - vypíšou se všechny už v tom php skriptu.. ale samozřejmě zase s otazníkama. Ale děkuju! |
||
Časová prodleva: 16 let
|
0