Problem sa utf-8 encodingom na humanost.org
Sajt je imao problem sa virusima... pa smo pregazili ceo wordpress novom verzijom [iz Fantastica].
Sada je utf-8 encoding otisao dodjavola, moze se videti na http://humanost.org/blog/ gledao sam direktno iz phpmyadmin - kao da su nasa slova zapisana sa 4 bajta, umesto normalnih 2. inace svuda u konfiguraciji wordpressa je podesen utf-8. tabele su ' latin1_swedish_ci' charset. taj charset je bio i pre... videh u backup-u. nemam iskustva sa wordpressom, pa pitam ovde - ima li neko ideju sta se ovde desilo i sta da mu radim? |
Napravi rezervnu kopiju tabele sa tekstovima i onda u na njoj izvrsi promjene pomocu SQL funkcije replace za svaki string koji se nepravilno prikazuje.
Prethodno promjeni charset. Kôd:
update TABELA set IME_KOLONE = replace(IME_KOLONE, 'trazeni string', 'string sa kojim mjenjas'); Pazi ovo moze privremeno zaustaviti ostale konekcije prema bazi i tako naciniti trenutno nedostupan sajt. Mozes to uraditi i iz PHP stim da ogranics broj redova na koje primjenjujes promjene, a tu opet moras paziti koji encoding koristis za konekciju sa bazom. Nadam se da ce ti ovo pomoci da pronadjes put za rjesavanje problema. |
Btw, greška je što su te tabele uopšte imale latin1_swedish_ci charset kada se u njih guraju utf8 podaci... Takve stvari često znaju da izazovu problem.
|
Citat:
parasdoksalno - sam mysql opet 2 bajta pretvori u 4 :/ |
Nisi napisao da li si promjenio Latin1 u UTF8. To moras napraviti osim na tabeli i na svakoj koloni koja sadrzi tekst i tek onda mozes da izvrsis promjene.
Ovo se dogodilo zato sto si povukao kopiju baze u kojoj je sve zapisano u latin1_swedish_ci. Probaj rucno da promjenis slova u phpMyAdmin-u i ako onda ispravno prikaze na sajtu ti uradi replace za svaki znak. |
Probacu sutra... pa javim.
|
Ja sam imao sličan problem skorije (ne sa WP-om, ali je isto software instaliran iz Fantastica) i lakše mi je bilo da iznova instaliram skriptu (ručno), a onda da vratim bekap. Doduše, moj bekap je imao utf8_unicode_ci :)
|
Podigni backup u neku temp bazu i promeni sve tabele u UTF8 pomocu:
Kôd:
ALTER TABLE naziv_tabele DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; Kôd:
UPDATE naziv_tabele SET naziv_kolone = CONVERT (CONVERT (CONVERT (naziv_kolone USING latin1) USING binary) USING utf8); Kôd:
ALTER DATABASE naziv_baze DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; |
Sa slicnim problemom sam se susreo u toku prosle godine vise puta. Uvijek je bilo drugacije rijesenje.
Zadnji sajt koji sam popravljao bio je u cirilici, a experti su tekstove slali bez obavjestavanja MySQL da prima u UTF8 tako da je sve bila gomila smeca. To sam lako rijesio izvlaceci po 10 000 zapisa u Latin1 i ponovo ih upisujuci u UTF8. Napisao sam skriptu koja je to sve odradila. Tabelu velku nesto vise od 1 GB sveo sam tako na 500 MB. Prije dvije godine preuzeo sam jedan od posjecenijih sajtova koji je imao tekstove u cirilici i u latinici u istoj tabeli. Cirilicne kolone su imale zapise u HTML brojevima. Malo sam se namucio da to sredim. Sad je to dovedeno u red. Radi bez vecih intervencija. Pooanta svega ovoga je da postavljenje sajtova treba prepustiti ljudima koji znaju svoj posao da kasnije ne bi imali bezrazloznih problema. Oni koji uce sva rjesenja mogu pronaci postavljajuci upite na pretrazivacima. Neko se potrudio da zapise svoje iskustvo. |
Od wordpress-a 2.2 moze se definisati character set ali samo prilikom nove instalacije. I to se definise u config.php tako sto se u DB_CHARSET upise utf8 a DB_COLLATE ostavi prazan.
Ja nikako ne volim fantastico i ostale scripte za automatsko instaliranje zato predlazem novu instalaciju wordpress-a za koju ces biti siguran da je utf8. Onda ostaje jos da se mysql dump sa latin1_swedish_ci konvertuje u utf8 i da se onda importuje. Konversija moze da uradi kako je napisao @User da se alter imena tabli, ime baze i text polja. |
Vreme je GMT +2. Trenutno vreme je 17:08. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.