![]() |
Encoding XMLa na WordPressu
Situacija sledeca, prosle godine selim blog (wordpress) sa sharing hostinga na dedicated, sve funkcionise bez problema. Pre par meseci, gasim dedicated i vracam se na isti sharing hosting i problemi sa xml RSSa pocinju.
Naime, RSS feed koji izlazi sa feedurnera ima problem sa encoding. Kada moj inicijalni feed ubacim u neki RSS reader sve je OK, kada isto uradim sa feedom iz Feedburnera, haos sa nasim karakterima. Kada odem na panel Feedburnera na Troubleshootize, javlja mi gresku: Citat:
Evo code iz /wp_includes/feed-rss2.php (kako mi je po defaultu RSS2) koji pretpostavljam da pravi problem PHP kôd:
PHP kôd:
Interesantno mi je sto kada odem na validator W3C Feed i checkiram url inicijalnog feeda, javlja mi gresku. Kada pak uzmem code source mog generisanog xmla i checkiram ga direktnim unosom na validator kaze mi da je xml ispravan !! WTF??!! Unapred tnx. p.s. Mislim da je pitanje pocetnicko pa sam ga smestio ovde, ukoliko neko od admina misli da treba da ide na drugo mesto.. ;) |
Hm, meni je ovo prošlo:
http://feedvalidator.org/check.cgi?u...om%2FBlogowski Ima sitnih upozorenja, ali samo to? |
Da, zaboravio da kazem da kada provuces feedurnerov XML, kaze da je OK :D
Totalno strange :/ |
Kada pustim validaciju osnovnog feed-a:
http://feedvalidator.org/check.cgi?u...2Ffeed%2F#l318 prijavljuje problem sa našim slovima, tačnije velikim Š Ovo izgleda kao problem u bazi - odnosno, da naša slova nisu lepo upisana u bazu. Ako i proveriš post na koji se žali: http://www.blogowski.eu/2008/04/02/macbook-air-hacknut/ videćeš ipak da nije baš sve u redu :-) Izgleda se u migraciji nešto malo pokršilo za starije postove. |
Da, primetio sam to sa velikim slovom Š kada sam migrirao, pokusao da resim i nisam uspeo. Kapiram da je do baze (mozda i isti uzrok), ali ne nalazim izlas jebiga..
Vec razmisljam da ga skinem sa feedburnera tj. da feedburner preusmerim ka inicijalnom feedu i voilŕ..:1041: |
Nije samo veliko Š problem, problem je nevalidan izlaz iz baze - rešavaš problem na pogrešnoj strani ("zašto mi je feed nevalidan kada imam loše kodirane karaktere u bazi").
Tebi inicijalni feed ne valja, dok Feedburner markira problematične karatktere. Uostalom, provuci oba feed-a (Feedburner, inicijalni) kroz http://feedvalidator.org/ pa izvedi zaključke :) |
Ima osim tog SH ima josh jedna kombinacija. Kad se iz http://www.blogowski.eu/feed/ ukloni to, dobije se validan fajl koji kroz feedburner izgleda ovako:
http://feeds.feedburner.com/BlogWS1111 scripta za fix ovoga: <?php $buf = file_get_contents("blogowski-feed.xml"); $buf = str_replace("\xc5\x20","Š", $buf); $buf = str_replace("\xc3\x20","", $buf); file_put_contents("blogowski-feed-2.xml", $buf); \xc3\x20 nemam pojma shta bi moglo da bude neki apostrof ili tako neshto... probaj export baza, pa kroz ovu scriptu pa import... :1094: |
Citat:
|
Dumpujes bazu u text fajl i prepravi zstevin primer da ucitava taj fajl, zatim import izmenjenog fajla (preporucujem u drugu bazu i switchovanje konfiguracije na tu drugu bazu, kako bi bio siguran da to radi). Budi siguran da je sve UTF-8 (baza, konekcija ka bazi).
|
Još jedno zanimljivo rešenje, nisam doduše uspeo na brzaka da nadjem nešto slično što bi moglo kao workaround da se stavi u generator rss feeda i da fixne problem, ali mislim da bi ovo isto rešilo problem sa bazom. Naravno export i import mogu da naprave stvari još gorima, jer mysql ima encoding u bazi, encoding na klientu (linku) i on ume da konvertuje izmedju :)))
Fix za invalid utf-8 karaktere uz pomoć iconv-a: cat blogowski-feed.xml | iconv -c -f UTF-8 -t UTF-8 - > blogowski-feed-2.xml (dakle umesto blogowski-feed.xml i -2 stavi ulazni dump i izlazni fajl, pa probaj u novu mysql bazu da ubaciš da vidiš da li postoji problem.) PS: ovo neće srediti slovo Š :( |
Dumpovao bazu preko stevinog fajla, obrisao prethodnu bazu i importovao provucenu bazu. Defintivno ne radi, je** sam mu kevu :1014:
|
U najgorem slucaju, mozes skinuti taj dump u neki txt editor koji podrzava UTF-8, i izmeniti sve problematicne karaktere, i naravno, snimiti opet kao utf-8.
Zatim importovati u bazu. Ako i pored toga ima problema, onda se nesto pogresno radi. |
Pazi, OK i da idem pesaka i sve odradim, fora je sto sledeci post koji objavim bice opet sjeban, ne?
|
Ja razumeo da je to problem sa starim postovima samo, tj feedovima za te starije postove.
Ukoliko se javlja problem i sa novim, onda imas problem na relaciji WP <-> baza. Ko sto rekoh, proveri da li su baza, tabele i polja u UTF-8. U svakom slucaju bi morao da popravis i te starije postove. |
Baza je u UTF-8, ali postoje polja koja su u latin1_swedish_ci (a i koja su u UTF-8). E sad ima jos jedan totalno wired momenat, komentari su totalno OK. Naime imam poseban feed na feedburneru i tu je sve OK :)
OK, pretpostavljam da nije potrebno da su sva polja na UTF-8, da li neko zna koja polja u kojoj tablici mogu da prouzrokuju prethodnu boljku? :) Ili da ih menjam sve?? |
Mislim da bi ti bilo lakse da sva polja stavis u UTF-8.
Btw, proveri koji je tip polja za textove komentara, kladim se da su UTF-8 :) |
|
Hm, post_content polje ti je unicode, dok je comment_content polje latin1.
Posto nisam bas WP guru, ja bih ti preporucio sledece: napravi novu test instalaciju WP-a na serveru (u neki dir), on bi trebao da ti kreira ispravnu bazu, i zatim u nju importuj ispravljen dump iz prethodnih postova. I vidi da li je tu ispravan prikaz. Ako jeste, onda da izbrises staru WP instalaciju i napravis novu, i importuj isti fajl. Mislim da ti je to najelegantnije resenje. |
Možda je ovo bezbolnije:
- napravi testni tekst koji ima sva naša slova: čćšžđČĆŽŠĐ - proveri da li se u oba feed-a (inicijalni / FeedBurnder) vidi kako treba - ako se vidi, sledeći korak je da se uradi replace u bazi (iz phpMyAdmin-a) u tekstu "loše upisanih" naših slova sa kodovima naših slova iz ovog dobrog teksta Kôd:
Update wp_posts SET post_contetnt = replace(post_content, los_kod, dobar_kod) where ima_losih_kodova |
^ To ne resava problem sa novim postovima koje bude ubacivao.
|
Jebem li ga... U lokalu napravio svezu instalaciju. Uvesao tablice samo za komentare, postove, kategorije. Cak i tablicu wp_option nisam uvezao neko rucno nastelovao. Posle sve lepo izvezao on line.. i ne jebe.. :/
Pre toga sam proterao te sve tablice kroz onu skripticu i nista. Za svaki slucaj da proverim i da li novi postovi nece kojim slucajem da se OK ponasaju, objavio jedan post sa nasim slovima, sacekao koji min. da ga feedburner "prevari" i bljuje mi opet sranja. Naravno kada checkujem XML na validator javlja iste one greske :( Nemam pojma, nisam pametan... |
Probaj direktno na serveru da napravis, ne u lokalu pa na server.
|
Ma kakvi, ne je** me 3%
Sve rucno uradio na serveru, ma kakvi... :( Opet probao objavljivanje novog posta i opet ista stvar. Mislim da cu da napusim feedburner i prebacim se na svoj feed. Jebi ga, znam da nije neko resenje, ali ne znam sta drugo da radim osim da idem post po post da ubacujem rucno na svezi instal (500 postova), a onda sve isto sa komentima (preko 2k) :D |
Baza je ocigledno pukla, sada checkujem opet na validatoru i vidim da ima samo par postova koji nisu encodirani, ono sto ne kapiram sto nove postove mi sjebe ??
|
Dva workarounda za problem:
Kôd:
<?php Kôd:
#!/bin/bash |
Steva ga opravi, sada jos da da resenje celo ovde pa da stavimo reseno :)
Usput, pored Steve hvala i Morenu, Dejanu i ostalima ;) |
hehe, pogodio sam ko je autor ovog koda sa iconv i pre nego sto sam procitao ime :P
inace, just for the record, zsteva se u stvari zove Zeljko :) |
Ma znam, addict sam facebooka, mozda gori i od Eniaca :D Nego to zbog pseuda (valjda se ne ljuti? :1050: )
|
@ivanhue Hvala kolega, biće danas (nadam se) isto to ali iz ob handlera ;)
zsteva zato što je steva već bilo zauzeto (pre mnogo godina), zsteva je poprilično unique na netu, tako da google:zsteva manje više sve referencira na mene :) Naravno Steva ili Željko, po potrebi i Zoran, pošto ljudi znaju da je zsteva od nešto Stevanović, pa kao šta bi Z moglo da bude ? Pa Zoran naravno :) |
Malo kasno za Peđu ali možda će koristiti ostalima. I ja sam imao isto problem na jednom od blogova, pa evo kako sam to rešio.
Funkcija koja konvertuje sve atribute u svim tabelama u bazi u UTF-8; Citat:
|
Vreme je GMT +2. Trenutno vreme je 21:01. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.