![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/cool.png)
Cześć.
![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/cool.png)
Ale się namęczyłeś!.
![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/whistling.png)
Ale to dobrze. Doceniam ludzi którzy sami dochodzą do rozwiązania jakiegoś problemu. Tylko szkoda Twojej pracy, bo ten sam efekt uzyskałbyś Ty, i każdy kto ma "
pytajniki" zamiast polskich znaków, modyfikując jeden plik.
![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/cool.png)
A jaki?. Nazywa się on "
database.php" i znajduje się w głównym katalogu
Joomla o nazwie "
includes". W poprzednich wersjach ten plik od linii
100 miał taki kod:
ORYGINALNY KOD z pliku "
database.php" w
Joomla 1.0.11:
Kod: |
$this->_table_prefix = $table_prefix;
//@mysql_query("SET NAMES 'utf8'", $this->_resource);
$this->_ticker = 0;
$this->_log = array();
|
Widzimy tutaj, że że za podwójnym ukośnikiem ( slashem ) mamy wysyłane zapytanie do bazy za pomocą kwerendy
SET NAMES. Za pomocą tej prostej kwerendy (
SET NAMES 'utf8') można wymusić aby wszelkie napisy były odsyłane do klienta w wybranym formacie (tu:
utf8). Czyli system kodowania znaków dla połączenia
Baza SQL->Twój serwer. Ale jak sam widzisz, jest to
zneutralizowane zapytanie, poprzez ukośniki po to, aby nie wpływać na domyślne ustawienia serwera
MySQL. Tak działo się do oficjalnej wersji
Joomla 1.0.12.
![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/cool.png)
Natomiast w przypadku
Joomla 1.0.13 ISO ktoś celowo zrobił wymuszenie zmiany kodowania dla
Systemu porównań dla połączenia MySQL, ale tym razem na
Latin2, co jest niepoprawne ( no chyba że mamy bazę z takim zestawem znaków, ale to są wyjątki ) i powoduje efekt taki, że wymusza to kodowanie, nie bacząc na system kodowania domyślny
System porównań dla połączenia MySQL w całej bazie
SQL. Może to być przecież
UTF-8. Co nie przeszkadza, aby strona była w kodowaniu
ISO-8859-2, tak jak np. u mnie. Ja mam w bazie tak:
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8).
System porównań dla połączenia MySQL: UTF-8 utf8_unicode_ci
Natomiast w tabelach we wszystkich polach mam "
Metoda porównywania napisów":
latin1_swedish_ci, czyli
ISO-8859-1.
![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/cool.png)
Czyli nic związanego z
ISO-8859-2, a strona pracuje poprawnie w tymi zestawami porównań i kodowania znaków. Podejrzewam że pomysłodawca następnej linijki kodu, ale już z
Joomla 1.0.13 ISO:
ORYGINALNY KOD z pliku "
database.php" w
Joomla 1.0.13 ISO:
Kod: |
$this->_table_prefix = $table_prefix;
@mysql_query("SET NAMES 'latin2'", $this->_resource);
$this->_ticker = 0;
$this->_log = array();
|
...kierując się tym, że to jest
Joomla ISO, po prostu popełnił błąd, i wymusił na bazie przez wspomnianą wyżej kwerendę
SET NAMES, w tym przypadku
SET NAMES 'latin2', dla połączenia
Baza SQL->Twój serwer czyli - "
System porównań dla połączenia MySQL", to kodowanie na
'latin2', czyli
ISO-8859-2. A ty masz w bazie np.
utf8_unicode_ci. I tym samym zrobił Ci "
kaszanę" w bazie
SQL. Może nie świadom skutków, które widziałeś na swojej stronie. Dlatego co należny zrobić.
![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/cool.png)
Zmodyfikować powyższy kod w pliku "
database.php" po aktualizacji, lub jeszcze przed, starszej wersji
CMS-a za pomocą
Joomla 1.0.13 ISO (
piszę o aktualizacji specjalnie, bo o instalacji będzie dalej ) na taki:
ZMODYFIKOWANY KOD w pliku "
database.php" w
Joomla 1.0.13 ISO:
Kod: |
$this->_table_prefix = $table_prefix;
//@mysql_query("SET NAMES 'latin2'", $this->_resource);
$this->_ticker = 0;
$this->_log = array();
|
...czyli zneutralizowanie zapytania do bazy
SQL, które to powoduje całe zamieszanie, To działa
![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/w00t.png)
, sprawdzałem. Lepiej było by zrobić to w trybie
offline, przed zapisaniem "
Konfiguracji Globalnej Witryny". Bo jeśli dokonamy zapisu, a mamy sporo artykułów, to czeka nas kupa roboty z zamianą
pytajników na polskie znaki.
![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/w00t.png)
Najlepiej byłoby, ale tylko dla wersji instalacyjnej, nie aktualizacji w pliku "
install2.php" zmienić kod:
Kod: |
// Does this code actually do anything???
$configArray['DBhostname'] = $DBhostname;
$configArray['DBuserName'] = $DBuserName;
$configArray['DBpassword'] = $DBpassword;
$configArray['DBname'] = $DBname;
$configArray['DBPrefix'] = $DBPrefix;
//check SQL version
$charset = _DB_CHARSET;
$collate = _DB_COLLATE;
if(function_exists('version_compare')){
if(version_compare($database->getVersion(), '4.1.0') < 0){
echo "<script>alert('Your MySQL version is: ".$database->getVersion().". UTF-8 settings may not work properly on versions less than 4.0.');</script>";
$charset = '';
$collate = ';';
}
}
//Here we create the UTF-8 database
$sql = "CREATE DATABASE `$DBname` ".$charset.' '.$collate;
|
Na kompatybilny ze wcześniejszymi wersjami
Joomla, np tak:
Kod: |
// Does this code actually do anything???
$configArray['DBhostname'] = $DBhostname;
$configArray['DBuserName'] = $DBuserName;
$configArray['DBpassword'] = $DBpassword;
$configArray['DBname'] = $DBname;
$configArray['DBPrefix'] = $DBPrefix;
$sql = "CREATE DATABASE `$DBname`";
|
...ale nie wiem, czy np. ja uzyskałbym zgodę od Twórców
Joomla w Kapeluszu na takie przeróbki. Zapytam się o to Szefa Projektu i pomysłodawcę,
Zwiastuna. A nóż pozwoli na taką modyfikacje plików instalacyjnych. Wiem, że ma z tymi, opisywanymi wyżej problemami sporo kłopotów na
Forum Joomla.pl. A jest człowiekiem inteligentnym, więc myślę że powinno się udać.
![](http://www.jokris.info/components/com_fireboard/template/default/images/english/emoticons/cool.png)
To tyle. Dla
Joomla 1.0.13 UTF sytuacja pewnie wygląda podobne. Ale muszę to przetestować. Pozdrawiam.
Jokris.