Vyber kodovania pre DB

Programovacie jazyky, rady, poradňa...
xivo
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 752
Registrovaný: 27 jún 2005, 22:49
Bydlisko: Slovensko
Kontaktovať používateľa:

Vyber kodovania pre DB

Príspevok od používateľa xivo »

Mam mensi problem, kamosovi robim www a stale mi namiesto "č","š" ... hadze "?", Na stranke mam spravne nastavene charset=Windows-1250 takze sa jedna o db z ktorej taham texty a pre nu som uz skusil hadam vsetky v ktorych sa nachadzalo "sk" ale stale nic ...
pouzivam free webhosting ic.cz tak ak by niekto vedel ktore kodovanie si mam vybrat tak mu budem velmi vdacny :oops:
masterdead
SysAdmin
SysAdmin
Používateľov profilový obrázok
Príspevky: 1809
Registrovaný: 03 aug 2005, 23:32
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa masterdead »

UTF-8 si skusal?
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

odporucil by som utf-8. a v pripade problemov, hned po prihlaseni na server pustit query "SET NAMES utf8"
add: len samozrejme musis potom upravit aj kodovanie definovane v hlavicke na utf8
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Veľmi často je nastavené, aby MySQL ukladal dáta v utf-8 kódovaní. Aby si mohol pracovať aj s inými znakovými sadami, musíš MySQL povedať, v akej znakovej sade jej tie údaje posielaš a v akej ich chceš dostávať naspäť.
Skús pridať niečo ako (za otvorenie databázy):

Kód: Vybrať všetko

mysql_query("SET CHARACTER SET 'cp1250'", $link);
(alebo by sa dalo zmeniť predvolené kódovanie databázy)
xivo
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 752
Registrovaný: 27 jún 2005, 22:49
Bydlisko: Slovensko
Kontaktovať používateľa:

Príspevok od používateľa xivo »

No cafte som tu zase s malym problemom, po nastaveni kodovania na UTF_8_slovak_ci som si vydychol ze som to uz cele dorobil no nanestastie to tak nebolo pretoze ked si prezeram stranku cez Operu a Explorer tak j vsetko OK ale cez Firefox to este stale robi bordel ...
Prílohy
uz_to_skoro_mam.JPG
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Možno sa v http hlavičke posiela viac kódovaní (v takom prípade by sa malo použiť to prvé, ale IE na to kašle).
xivo
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 752
Registrovaný: 27 jún 2005, 22:49
Bydlisko: Slovensko
Kontaktovať používateľa:

Príspevok od používateľa xivo »

sorry chrono ale moc som z toho nechytil, lebo problem mi nerobi IE ale Firefox :?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

xivo napísal:sorry chrono ale moc som z toho nechytil, lebo problem mi nerobi IE ale Firefox :?
To je pre to, že IE na štandardy kašle. :) Daj link na tú stránku a pozriem, či je problém v tom štandardnom kódovaní.

//chrono: Tak nie. V html hlavičke máš nastavenú nesprávnu znakovú sadu. Má tam byť iba UTF-8 a nie UTF_8_slovak_ci
xivo
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 752
Registrovaný: 27 jún 2005, 22:49
Bydlisko: Slovensko
Kontaktovať používateľa:

Príspevok od používateľa xivo »

NO tak ked som to zmenil tak to bolo este horsie takze asi budem musiet este v db zmenit len na ktore ? ten UTF8_bin ?? alebo ...
Prílohy
kodovanie.JPG
hojko
Site Admin
Site Admin
Používateľov profilový obrázok
Príspevky: 38514
Registrovaný: 24 apr 2004, 18:29
Bydlisko: Európa
Kontaktovať používateľa:

Príspevok od používateľa hojko »

xivo: To co pises nie je kodovanie MySQL databaze, je to len pre PhpMyAdmin a nepomoze ti to. Kodovanie zmenis jedine cez konzolu MySQL na strane servera.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

hojko napísal:xivo: To co pises nie je kodovanie MySQL databaze, je to len pre PhpMyAdmin a nepomoze ti to. Kodovanie zmenis jedine cez konzolu MySQL na strane servera.
nemas pravdu .. v phpMyAdminovi sa tiez nastavuje kodovanie DB ..


ako uz bolo spomenute vyssie .. nastav si vystup z DB na potrebnu znakovu sadu na zaciatku skriptu (najlepsie hned po pripojeni k DB) cez

SET CHARACTER SET ...
hojko
Site Admin
Site Admin
Používateľov profilový obrázok
Príspevky: 38514
Registrovaný: 24 apr 2004, 18:29
Bydlisko: Európa
Kontaktovať používateľa:

Príspevok od používateľa hojko »

gwixt: Nemas pravdu, to co nastavujes v PhpMyAdminovi co vidis na obrazku nie je kodobanie db. Pokial ide o set character, tak myslim, ze tym databazu neprekonvertujes, ci sa mylim???
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

ja som sa vybodol na vsetky tieto kodovania a spravil som si funkciu s ktorou som nemal este problem. takze tu je iste riesenie

Kód: Vybrať všetko


function diakritika($textpop)
{
	$textpop=ereg_replace("á", "=:ad:=", $textpop);
	$textpop=ereg_replace("ä", "=:ab:=", $textpop);
    $textpop=ereg_replace("ć", "=:cd:=", $textpop);
    $textpop=ereg_replace("č", "=:cm:=", $textpop);
    $textpop=ereg_replace("ď", "=:dm:=", $textpop);
    $textpop=ereg_replace("é", "=:ed:=", $textpop);
    $textpop=ereg_replace("ě", "=:em:=", $textpop);
	$textpop=ereg_replace("í", "=:id:=", $textpop);
    $textpop=ereg_replace("ĺ", "=:ld:=", $textpop);
    $textpop=ereg_replace("ľ", "=:lm:=", $textpop);
    $textpop=ereg_replace("ň", "=:nm:=", $textpop);
    $textpop=ereg_replace("ó", "=:od:=", $textpop);
    $textpop=ereg_replace("ő", "=:ob:=", $textpop);
    $textpop=ereg_replace("ô", "=:ov:=", $textpop);	
    $textpop=ereg_replace("ŕ", "=:rd:=", $textpop);
	$textpop=ereg_replace("ř", "=:rm:=", $textpop);
    $textpop=ereg_replace("ś", "=:sd:=", $textpop);
    $textpop=ereg_replace("š", "=:sm:=", $textpop);
    $textpop=ereg_replace("ť", "=:tm:=", $textpop);
    $textpop=ereg_replace("ú", "=:ud:=", $textpop);
    $textpop=ereg_replace("ű", "=:ub:=", $textpop);
    $textpop=ereg_replace("ů", "=:uo:=", $textpop);
    $textpop=ereg_replace("ý", "=:yd:=", $textpop);
    $textpop=ereg_replace("ź", "=:zd:=", $textpop);
    $textpop=ereg_replace("ž", "=:zm:=", $textpop);
    
	$textpop=ereg_replace("Á", "=:Ad:=", $textpop);
    $textpop=ereg_replace("Ć", "=:Cd:=", $textpop);
    $textpop=ereg_replace("Č", "=:Cm:=", $textpop);
    $textpop=ereg_replace("Ď", "=:Dm:=", $textpop);
    $textpop=ereg_replace("É", "=:Ed:=", $textpop);
    $textpop=ereg_replace("Ě", "=:Em:=", $textpop);
	$textpop=ereg_replace("Í", "=:Id:=", $textpop);
    $textpop=ereg_replace("Ĺ", "=:Ld:=", $textpop);
    $textpop=ereg_replace("Ľ", "=:Lm:=", $textpop);
    $textpop=ereg_replace("Ň", "=:Nm:=", $textpop);
    $textpop=ereg_replace("Ó", "=:Od:=", $textpop);
    $textpop=ereg_replace("Ő", "=:Ob:=", $textpop);
    $textpop=ereg_replace("Ô", "=:Ov:=", $textpop);	
    $textpop=ereg_replace("Ŕ", "=:Rd:=", $textpop);
	$textpop=ereg_replace("Ř", "=:Rm:=", $textpop);
    $textpop=ereg_replace("Ś", "=:Sd:=", $textpop);
    $textpop=ereg_replace("Š", "=:Sm:=", $textpop);
    $textpop=ereg_replace("Ť", "=:Tm:=", $textpop);
    $textpop=ereg_replace("Ú", "=:Ud:=", $textpop);
    $textpop=ereg_replace("Ű", "=:Ub:=", $textpop);
    $textpop=ereg_replace("Ů", "=:Uo:=", $textpop);
    $textpop=ereg_replace("Ý", "=:Yd:=", $textpop);
    $textpop=ereg_replace("Ź", "=:Zd:=", $textpop);
    $textpop=ereg_replace("Ž", "=:Zm:=", $textpop);  
    
    return $textpop;
    
}

function diakritikaspat($textpo)
{
	$textpo=ereg_replace("=:ad:=", "á", $textpo);
	$textpo=ereg_replace("=:ab:=", "ä", $textpo);
    $textpo=ereg_replace("=:cd:=", "ć", $textpo);
    $textpo=ereg_replace("=:cm:=", "č", $textpo);
    $textpo=ereg_replace("=:dm:=", "ď", $textpo);
    $textpo=ereg_replace("=:ed:=", "é", $textpo);
    $textpo=ereg_replace("=:em:=", "ě", $textpo);
	$textpo=ereg_replace("=:id:=", "í", $textpo);
    $textpo=ereg_replace("=:ld:=", "ĺ", $textpo);
    $textpo=ereg_replace("=:lm:=", "ľ", $textpo);
    $textpo=ereg_replace("=:nm:=", "ň", $textpo);
    $textpo=ereg_replace("=:od:=", "ó", $textpo);
    $textpo=ereg_replace("=:ob:=", "ő", $textpo);
    $textpo=ereg_replace("=:ov:=", "ô", $textpo);	
    $textpo=ereg_replace("=:rd:=", "ŕ", $textpo);
	$textpo=ereg_replace("=:rm:=", "ř", $textpo);
    $textpo=ereg_replace("=:sd:=", "ś", $textpo);
    $textpo=ereg_replace("=:sm:=", "š", $textpo);
    $textpo=ereg_replace("=:tm:=", "ť", $textpo);
    $textpo=ereg_replace("=:ud:=", "ú", $textpo);
    $textpo=ereg_replace("=:ub:=", "ű", $textpo);
    $textpo=ereg_replace("=:uo:=", "ů", $textpo);
    $textpo=ereg_replace("=:yd:=", "ý", $textpo);
    $textpo=ereg_replace("=:zd:=", "ź", $textpo);
    $textpo=ereg_replace("=:zm:=", "ž", $textpo);
    
    $textpo=ereg_replace("=:Ad:=", "Á", $textpo);
    $textpo=ereg_replace("=:Cd:=", "Ć", $textpo);
    $textpo=ereg_replace("=:Cm:=", "Č", $textpo);
    $textpo=ereg_replace("=:Dm:=", "Ď", $textpo);
    $textpo=ereg_replace("=:Ed:=", "É", $textpo);
    $textpo=ereg_replace("=:Em:=", "Ě", $textpo);
	$textpo=ereg_replace("=:Id:=", "Í", $textpo);
    $textpo=ereg_replace("=:Ld:=", "Ĺ", $textpo);
    $textpo=ereg_replace("=:Lm:=", "Ľ", $textpo);
    $textpo=ereg_replace("=:Nm:=", "Ň", $textpo);
    $textpo=ereg_replace("=:Od:=", "Ó", $textpo);
    $textpo=ereg_replace("=:Ob:=", "Ő", $textpo);
    $textpo=ereg_replace("=:Ov:=", "Ô", $textpo);	
    $textpo=ereg_replace("=:Rd:=", "Ŕ", $textpo);
	$textpo=ereg_replace("=:Rm:=", "Ř", $textpo);
    $textpo=ereg_replace("=:Sd:=", "Ś", $textpo);
    $textpo=ereg_replace("=:Sm:=", "Š", $textpo);
    $textpo=ereg_replace("=:Tm:=", "Ť", $textpo);
    $textpo=ereg_replace("=:Ud:=", "Ú", $textpo);
    $textpo=ereg_replace("=:Ub:=", "Ű", $textpo);
    $textpo=ereg_replace("=:Uo:=", "Ů", $textpo);
    $textpo=ereg_replace("=:Yd:=", "Ý", $textpo);
    $textpo=ereg_replace("=:Zd:=", "Ź", $textpo);
    $textpo=ereg_replace("=:Zm:=", "Ž", $textpo); 
    
    $textpo=ereg_replace("=:r:=", "<br />", $textpo);
    $textpo=ereg_replace("=:oz:=", "<p>", $textpo);
    $textpo=ereg_replace("=:ok:=", "</p>", $textpo);
    $textpo=ereg_replace("=:c:=", "<hr size=\"1\" color=\"navy\" width=\"100%\" />", $textpo);
    $textpo=ereg_replace("=:hz:=", "<sup>", $textpo);
    $textpo=ereg_replace("=:hk:=", "</sup>", $textpo);
    $textpo=ereg_replace("=:dz:=", "<sub>", $textpo);
    $textpo=ereg_replace("=:dk:=", "</sub>", $textpo);
    $textpo=ereg_replace("=:tz:=", "<b>", $textpo);
    $textpo=ereg_replace("=:tk:=", "</b>", $textpo);
    $textpo=ereg_replace("=:kz:=", "<i>", $textpo);
    $textpo=ereg_replace("=:kk:=", "</i>", $textpo);
    $textpo=ereg_replace("=:pz:=", "<u>", $textpo);
    $textpo=ereg_replace("=:pk:=", "</u>", $textpo);
    
    return $textpo;
}
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

preco tam vyuzivas ereg_replace ked tam nemas regularny vyraz? je to zbytocne pomale
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

nie som sice php guru ale tak neviem odkial si zobral ze toto je pomalsie ako npriklad str_replace. tym ta nechcem spochybnit, ale vypytat link :wink: ak bude rychlejsi sposob, tak rad pouzijem. myslim, ze na par textov co som mal (bezne pocty) to nebolo zle riesenie
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

xivo napísal:NO tak ked som to zmenil tak to bolo este horsie takze asi budem musiet este v db zmenit len na ktore ? ten UTF8_bin ?? alebo ...
To čo ukazuješ nie je nastavenie znakovej sady. To je iba na delenie slov. Tá stránka je v kódovaní windows-1250 a v html hlavičke máš UTF_8_slovak_ci. Keď to chceš mať v utf-8, musíš tam mať utf-8 a ešte musíš MySQL povedať, že to chceš v utf-8. :) Teda niečo takéto:

Kód: Vybrať všetko

        mysql_query("SET CHARACTER SET 'utf8'", $link);
        mysql_query("SET COLLATION_CONNECTION='utf8_slovak_ci'", $link);
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

hojko napísal:gwixt: Nemas pravdu, to co nastavujes v PhpMyAdminovi co vidis na obrazku nie je kodobanie db. Pokial ide o set character, tak myslim, ze tym databazu neprekonvertujes, ci sa mylim???
z toho obrazka sa neda urcit co vlastne nastavujes ... ja len vravim ze sa cez to da nastavit aj kodovanie DB ... ostatne ako takmer vsetko co sa da cez konzolu ....

a tym set charakter set nekonvertujes DB ale len nastavis kodovanie vystupu
IgiPoP
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 446
Registrovaný: 12 sep 2005, 8:17
Bydlisko: MT

Príspevok od používateľa IgiPoP »

turtlak69 napísal:nie som sice php guru ale tak neviem odkial si zobral ze toto je pomalsie ako npriklad str_replace. tym ta nechcem spochybnit, ale vypytat link :wink: ak bude rychlejsi sposob, tak rad pouzijem. myslim, ze na par textov co som mal (bezne pocty) to nebolo zle riesenie
ereg_replace funguje inak ako str_replace. kedze ty vo svojom skripte nahradzas urcity string za iny, je samozrejmostou pouzit funkciu str_replace, ktora prechadza retazcom iba raz. funkcie, ktore spracovavaju regularne vyrazy, pouzivaju ovela komplikovanejsiu metodu hladania zhody a preto predlzuju cas vykonavania. preto takuto fciu pouzivaj iba v pripadoch pouzitia regularneho vyrazu, a nie na nahradenie jednoducheho retazca za retazec.
taktiez nezabudaj, ze pri utf-8 su znaky s diakritikou povazovane za MultiByte String, a teda ked uz tak mb_ereg_replace

good luck.
Napísať odpoveď