DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Web aplikacije, web servisi i software (http://www.devprotalk.com/forumdisplay.php?f=30)
-   -   Problem sa utf-8 encodingom na humanost.org (http://www.devprotalk.com/showthread.php?t=8452)

Peca 16. 02. 2010. 20:42

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?

zlukic 16. 02. 2010. 22:38

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');
To je jedan od nacina kako mozes ispraviti pokvaren zapis. Ovo primjeni za svaku kolonu. Jeste da je to pjeske, ali radi. Meni je pomoglo da ispravim mnogo velike tabele.

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.

Bojan Zivanovic 16. 02. 2010. 22:55

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.

Peca 16. 02. 2010. 22:58

Citat:

Originalno napisao zlukic (Napišite 79823)
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');

što je najgore - i to sam probao u očaju... i znaš šta se desi?
parasdoksalno - sam mysql opet 2 bajta pretvori u 4 :/

zlukic 16. 02. 2010. 23:30

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.

Peca 17. 02. 2010. 00:11

Probacu sutra... pa javim.

Nemanja Avramović 17. 02. 2010. 00:27

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 :)

User 17. 02. 2010. 01:26

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;
A nakon toga promeni sva tekstualna polja (CHAR, VARCHAR, TEXT) unutar svih tabela u UTF8 na sledeci nacin:
Kôd:

UPDATE naziv_tabele SET naziv_kolone = CONVERT (CONVERT (CONVERT (naziv_kolone USING latin1) USING binary) USING utf8);
Poslednje, promeni charset same baze (ukoliko vec nije):
Kôd:

ALTER DATABASE naziv_baze DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Potom podigni tako sredjenu bazu na mesto prave i sve bi trebalo da radi (a i pored toga, baza ce biti UTF8, kako i treba da bude).

zlukic 17. 02. 2010. 01:29

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.

Mladjo 17. 02. 2010. 06:53

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 12:31.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.