Jestli něco opravdu z duše nemám ráda, jsou to různá kódování. Chápu, že v dobách dávno minulých bylo potřeba nějak znaky kódovat. Paměti bylo málo a byla drahá. Proto se šetřilo, jak to jen šlo. Ale v dnešní době mi to připadá poněkud překonané.
Jenže různá kódování tu jsou, a ještě nějakou dobu určitě budou. Takže je nutné s nimi žíti. Xoops komunikuje s databází. V drtivé většině případů je to MySQL. Do relativně nedávné doby nebylo nic složitého zálohovat a přenášet tabulky. Jenže poslední dobou to problém je. Tedy pokud se neupraví, "nehackne", část systému.
Takže pokud máte odvahu, můžeme se ponořit do hlubin Xoopsu a něco s těmi kódováními udělat. Vzhůru dolů 
Nejprve je potřeba najít soubor mysqldatabase.php. Ten se nachází v adresáři CLASS / DATABASE. Ze všeho nejprve je potřeba udělat jeho zálohu. Ono je to vždy lepší. Soubor pak otevřeme v libovolném textovém editoru, který neukládá formátování. Ideální je Poznámkový blok z Windows, nebo ConTEXT či PsPad. Když je soubor otevřený, je třeba najít tuto část: function connect($selectdb = true) { if ( !extension_loaded( 'mysql' ) ) { trigger_error( 'notrace:mysql extension not loaded', E_USER_ERROR ); return false; } if (XOOPS_DB_PCONNECT == 1) { $this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS); } else { $this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS); } if (!$this->conn) { $this->logger->addQuery('', $this->error(), $this->errno()); return false; } if($selectdb != false){ if (!mysql_select_db(XOOPS_DB_NAME)) { $this->logger->addQuery('', $this->error(), $this->errno()); return false; } } return true; } a před poslední return true vložit tyto řádky
mysql_query('SET character_set_results="WINDOWS-1250"'); mysql_query("SET CHARACTER SET WINDOWS-1250"); mysql_query("SET NAMES 'WINDOWS-1250'"); nebo použít Xoopsí způsob přístupu k databázi: $set = @mysql_query("SET character_set_results='WINDOWS-1250'", $this->conn); $set = @mysql_query("SET CHARACTER SET WINDOWS-1250", $this->conn); $set = @mysql_query("SET NAMES 'WINDOWS-1250'", $this->conn); První způsob je funkční a bez potíží. Ten druhý používá přímo prostředků Xoopsu k přístupu k databázi. Takže je vlastně správnější. Rozhodnutí o tom nebo onom způsobu je na každém správci. Oba fungují dobře. Místo kódování WINDOWS-1250 lze pochopitelně vložit téměř cokoli. Jen je potřeba mít všude stejnou hodnotu a také toto kódování pak používat. Žirafoviny používají právě kódování Windows 1250. Proto je i v tomto příkladě. Tímto jednoduchým trikem se databázi řekne, jaké kódování mají data v ní uložená a všechno bude dobře fungovat. Pokud se tyto řádky nevloží, bude všechno fungovat také. Ale jen do okamžiku obnovení databáze z nějaké zálohy. Nebo do pokusu překopírovat databázi na jiný server za účelem pokusů. Takto to mám například já doma. Na počítači běží Apache + PHP + MySQL a dělám si s Xoopsem pokusy. Když je všechno v pořádku, udělám totéž i zde. Jenže občas po pokusech je databáze nepoužitelná a proto je nutné ji obnovit. A také chci mít oba servery stejné, pokud možno, takže z tohoto serveru udělám zálohu a vložím ji do mé databáze doma. Bez popsané úpravy je to zlá můra a skoro to není možné udělat. S touto úpravou to jde snadno (někdy...)
|