posted by qubix on October 31, 2015

Ναι, το joomla 1.5.x είναι αρχαιολογία. Έλα όμως που υπάρχουν ακόμη sites σε αυτό από ανθρώπους που δε θέλουν να τα αναβαθμίσουν, δεν ξέρουν πως ή απλά τα έχουν παρατήσει στο έλεος της μοίρας τους...

Σε ένα τέτοιο site λοιπόν, ξαφνικά αντί για χαρακτήρες, παντού εμφάνισε αγγλικά ερωτηματικά ?????
Τελικά όμως δεν ήταν και τόσο ξαφνικά. Στον server αυτό, για λόγους performance, οι ιδιοκτήτες πήγανε από mysql 5.5 σε mariaDB 10.1 και από τότε και μετά το utf8 πήγε περίπατο στο παλιό αυτό joomla.

Γιατί όμως; Η απάντηση βρέθηκε στο αρχείο:

libraries/joomla/database/database/mysql.php

και συγκεκριμένα στη function hasUTF() στην οποία η γραμμή

return ($verParts[0] == 5 || ($verParts[0] == 4 && $verParts[1] == 1 && (int)$verParts[2] >= 2));

είναι φανερό πως δεν μπορεί να αναγνωρίσει οτιδήποτε μεγαλύτερο του 5.x ως version του όποιου SQL server είναι εν χρήση, και η mariaDB όπως προείπα είναι..10.1..
To ίδιο ακριβώς ισχύει και στο αρχείο:

libraries/joomla/database/database/mysqli.php

Η λύση είναι η αντικατάσταση της εν λόγω γραμμής με την παρακάτω:

return ($verParts[0] >= 5 || ($verParts[0] == 4 && $verParts[1] == 1 && (int)$verParts[2] >= 2));

Τώρα το αγαπημένο σας παλιό site θα παίξει κανονικά :]

hyperworks