Cześć.
Ale się namęczyłeś!.
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.
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.
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.
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ć.
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
, 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.
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ć.
To tyle. Dla
Joomla 1.0.13 UTF sytuacja pewnie wygląda podobne. Ale muszę to przetestować. Pozdrawiam.
Jokris.