Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP: změna kódování z databáze

Dobrý den.

Mám dotaz.Dělám web a mám problém s kódováním.Na databázi ale mám napojené 2 weby ... Rozdíl je v tom , že jeden potřebuje takové kódování a druhý zase jiné. Tak potřebuji aby jeden web si to uměl překonvertovat do správného kódování.Vím o funkci mb_convert_encoding() ale jestli funguje i na výpis z databáze a nebo jestli to nějak jde tak jak , to už nevím.... Pokud by někdo o nečem věděl napiště prosím...

Díky předem.

Předmět Autor Datum
Musíš se připojit do DB tím kódováním, které daný web potřebuje. DB/řádky_v_DB můžou mít klidně jiné…
ERASER 30.08.2012 12:35
ERASER
No ono je to tak... Jedná se o MMOG hru nevím zda li znáte " Metin 2 ".Kódování tabulek hry je big5.…
griven2 30.08.2012 13:05
griven2
Hry neznám. Pokud jsem to dobře pochopil, tak kódovaní na webu blbne z dvou (uvedený počet je pouze…
ERASER 30.08.2012 13:30
ERASER
Tabulka1 - (UTF-8_czech_ci) - tabulka s přihlašovacími údaji administrátorů. Tabulka2 - (UTF-8_czech…
griven2 30.08.2012 14:05
griven2
Co zkusit před odesíláním selectu mysql_query("SET NAMES 'BIG5'");
Eessencia 30.08.2012 15:20
Eessencia
To jsem již zkoušel... nepomhá
griven2 30.08.2012 15:54
griven2
V jakém kódování je: 1/DB =>? 2/Tabulka1 => UTF-8_czech_ci 3/Tabulka2 => UTF-8_czech_ci 4/Tabulka3 =…
ERASER 30.08.2012 15:24
ERASER
1/UTF-8_czech_ci 2/Tabulka1 => UTF-8_czech_ci 3/Tabulka2 => UTF-8_czech_ci 4/Tabulka3 => BIG5_chines…
griven2 30.08.2012 15:48
griven2
Chyba 5/Připojení na DB => nemám zvolené Takze tam nekde jak mas to pripojeni, dopis to tucne: $h…
ERASER 30.08.2012 16:01
ERASER
Ne stále stejný problém... Ukázka z nastavení Databází [ukazka_z_databaze.png] Ukázka z administrac…
griven2 30.08.2012 16:35
griven2
Pěkný obrázek, můžeš poskytnout nějaké "testovací data" z DB (Pokud to tedy není tajné)? Stačilo by…
ERASER 30.08.2012 17:32
ERASER
.sql soubour tabulka3 => příloha.Popř mohu poskytnout i udaje do DB jen vytvořím nového mysql uživat…
griven2 30.08.2012 17:42
griven2
Když teď koukám na ten sql soubor . název který si já nechávám vypsat tak je zapsaný jako " 0xB5B52B…
griven2 30.08.2012 17:52
griven2
Tak jsem asi na to přišel :puff:, ale nedokážu pochopit, jak jsi přišel nato, že tam máš nějaké šikm…
ERASER 30.08.2012 21:05
ERASER
No nemusím to mít v UTF-8 ale já jsem zvyklý to tak dělat a tak to dělám všude.Řekl mi to Navicat Pr… poslední
griven2 30.08.2012 21:27
griven2

No ono je to tak... Jedná se o MMOG hru nevím zda li znáte " Metin 2 ".Kódování tabulek hry je big5. Dělám CMS se spousty funkcemi ale zasekl jsem se právě na tomto... když jsem dělal administraci a chtěl jsem nechat vypsat itemy ( věci ve hře ) tak místo háčků a čárek mi to vypsalo samozdřejmě tento nesmysl � .Ale já aby nemusely být 2 databáze kde v 1 bude hra a v druhé bude web to se mi zdálo divné... tak jsem akorát přidal nové tabulky. Tabulky s webem má v kódování UTF-8 a hra je jak jsem již zmínil BIG5 . Když se připojím přes Navicat (MySql klient ) tak vidím normálně háčky čárky ale když si to nechám vypsat tak je tam ten nesmysl.Ale jak to teď mám udělat když potřebuji na i UTF-8 a i BIG5 kódování ? Napadlo mě pokud to nejde třeba připsat k funkci kdy se to nechává vypisovat tak zastavit připojení do db udělat nové s kódováním big5 a potom zase ukončit a obnovit znovu předchozí... Ale to by tak bylo zastavené a zapnuté minimálně 10x a to se mi nelíbí.Neměli by jste nějakou radu k mému případu?

Hry neznám.
Pokud jsem to dobře pochopil, tak kódovaní na webu blbne z dvou (uvedený počet je pouze pro příklad) různě kódovaných tabulek.

zastavené a zapnuté minimálně 10x

A co takhle se tam připojit 2krát současně, a každé připojení bude ve stejné kódování v jakém je daná tabulka v DB?

Tabulka1 - (UTF-8_czech_ci) - tabulka s přihlašovacími údaji administrátorů.
Tabulka2 - (UTF-8_czech_ci) - Různé nastavení pro chod administrace

Tabulka1 + Tabulka2 = Hlavní tabulky pro chod administrace

Tabulka3 - (BIG5_chinese_ci) - tabulka pro hru ( důležité dodržet původní kódování jinak je hra KO)

a teď na webu mám:

echo "<table>";
$query = mysql_query("SELECT * FROM tabulka3 ORDER BY  `tabulka3`.`vnum` ASC LIMIT 0 , 1000 ;");
   while($qtest = MYSQL_Fetch_Array($query)):
      $test = $qtest["vnum"];            
      
echo "<tr><td>$test</td></tr>";    
        
    endwhile;
echo "</table>";

atd a nechám si je vypsat do tabulky...
ale vypíše mi to místo diakritiky ty nesmysli co jsem psal výše ale potřeboval bych aby mi to vypsalo bez nesmyslů.... Jak to opravdu netuším.Jediné co potřebuji aby mi to nevypsalo ty � ale diakritiku tak jak tam má být. Jak to mám udělat to nevím...

Chyba

5/Připojení na DB => nemám zvolené

Takze tam nekde jak mas to pripojeni, dopis to tucne:

$hostname="127.0.0.1";
$user="test";
$password_db="test";
$databaze="test";
$spojeni=mysql_connect($hostname,$user,$password_d b)or die("<br>Nelze se připojit na databázi<br>");
mysql_query("SET CHARACTER SET utf8");//kodovani pro komunikaci
mysql_query("SET NAMES utf8");//kodovani pro komunikaci

mysql_select_db($databaze)or die("<br>Nepovedlo se otevřít databázi<br>");
...

Tak co ted, funguje?

Ne stále stejný problém...

Ukázka z nastavení Databází
[ukazka_z_databaze.png]
Ukázka z administrace webu co vypisuje....
[http://mt2.proototype.eu/ukazka_z_administrace.png ]

Vypisovací script (original)

case 'items';

echo "<center>\n<table cellpadding='1' cellspacing='1' border='1' bordercolor='gray'  width='600px'>\n";
echo "<tr><th>Vnum itemu</th><th>Název itemu</th><th>Cena</th><th>Další vylepšení</th></tr>";

$doquery2 = mysql_query("SELECT * FROM item_proto ORDER BY  `item_proto`.`vnum` ASC LIMIT 0 , 1000 ;");
   while($vzaz2 = MYSQL_Fetch_Array($doquery2)):
      $ivnum2 = $vzaz2["vnum"];
      $ilocalname2 = $vzaz2["locale_name"];
      $igold2 = $vzaz2["gold"];
      $irefivnum2 = $vzaz2["refined_vnum"];
$sqlq = mysql_query("SELECT * FROM player.item_proto WHERE vnum='$irefivnum2'");
        while($dsql = mysql_fetch_object($sqlq))
        {
        $irefinedvnum = $dsql->locale_name;

        }             
      
echo "<tr>\n<td>$ivnum2</td>\n<td>$ilocalname2</td>\n<td>$igold2</td>\n<td>$irefinedvnum</td>\n</tr>\n";    
        
    endwhile;
echo "<table>\n</center>"; 
break;

Config

<?php
$dbhost = "host";
$dbuser = "root";
$dbpass = "******";
$dbname = "player";

mysql_connect($dbhost,$dbuser,$dbpass)or die("<br>Nelze se připojit na databázi<br>");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES utf8");
mysql_select_db($dbname)or die("<br>Nepovedlo se otevřít databázi<br>");
?>

Tak jsem asi na to přišel :puff:, ale nedokážu pochopit, jak jsi přišel nato, že tam máš nějaké šikmooké kódování? Jestli ti to řekl nějaký program, tak bych ho odinstaloval a už v životě nikdy nepoužíval :!:

" 0xB5B52B302020202020202020202020202020202020202020 " Nemohlo by to být tím?

Ne to jsou pouze data zase v jiném typu, v tomto případě ve VARBINARY.
Klikni na obrázek a pochopíš:
[78screenshot_tn.15_tn.jpg]
Je to totiž v kódování windows-1250, a pokud to chceš mermomocí v UTF-8 tak třeba použitím iconv.
:-)

Zpět do poradny Odpovědět na původní otázku Nahoru