Elxis CMS Forum

Ελληνικό Forum => Γλώσσες - Πολυγλωσσία => Topic started by: NewAge on November 06, 2006, 13:51:23

Title: UTF-8 problem
Post by: NewAge on November 06, 2006, 13:51:23
Meta apo mia ka8arh egkatastash se linux server, ka8e fora pou phgainw sto admin o browser (firefox kai ie) den vlepei swsta to encoding, me apotelesma na vlepw ta gnwsta tetragwnakia : Ξ�ΡλΟ�ΞΉΟ�Ο�ΞΏΟ�ΞΏΞ―Ξ·Ο�Ξ
To encoding pou dialegei na balei monos tou ka8e fora kai se ka8e reload einai ISO-greek.
Fysika kai an to allaksw se utf-8 doulevei alla molis kanw click se mia allh selida h' pahtsw refresh ksanallazei h kwdikopoihsh
Sto frontend doulevoun ola kanonika

Epishs se windows server pou to evala topika se mena gia dokimes doulevei kanonika

Plhrofories systhmatos:
Η PHP τρέχει στο:       Linux newage-it.gr 2.4.20-021stab028.12.777-smp #1 SMP Fri May 13 16:04:37 MSD 2005 i686
Έκδοση Βάσης Δεδομένων:    mysql 4.1.15 (Έκδοση: 4.1.15)
Έκδοση PHP:    4.3.2
Web Server:    Apache/2.0.46 (Red Hat)
Διασύνδεση WebServer με PHP:    apache2filter
Έκδοση    Elxis 2006.3 Stable rev1060 [ OpenMind ] 21-October-2006 16:28 GMT+2
Περιηγητής:    Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0

kamia idea ti mporei na ftaiei?
Title: Re: UTF-8 problem
Post by: datahell on November 06, 2006, 14:04:44
Το ότι σου δουλεύει σωστά στο frontend και δεν σου δουλεύει στη διαχείριση είναι πολύ περίεργο. Θα ήθελα να το δω για να σου πω κάτι αξιοπιστο καθώς για τη μη σωστή εμφάνιση των χαρακτήρων μπορεί να οφείλονται πάρα πολλοί παράγοντες και πιθανότατα όχι το ίδιο το Elxis αφού έχει πλέον εκατοντάδες εγκαταστάσεις χωρίς τέτοιο  πρόβλημα. Δώσε ένα link για να το δω.
Title: Re: UTF-8 problem
Post by: NewAge on November 06, 2006, 14:21:37
se eyxaristw gia thn grhgorh apanthsh
ontws einai poly perirgo, exw kanei para polles ekgatastaseis mambo kai mia - dyo joomla
sto ellhniko joomla pali eixa to idio problhma kai tote to eixa lysei allazontas thn kwdikopoihsh twn arxeiwn apo utf-8 pou to eixan se iso pantou kai tis odhgies gia tous browser epishs.
eipa twra na mhn kanw to idio kai na krathsw thn arxikh proseggish se utf-8

mporeis na to deis edw:

http://www.prmanager.gr

an 8eleis login gia to admin ekana ena xrhsth pes mou kapou na sto steilw
etsi kai alliws omws fenete to la8os kai sthn selida login tou admin

eyxaristw
Title: Re: UTF-8 problem
Post by: datahell on November 06, 2006, 14:30:34
Δεν χρειάζομαι κωδικούς. Κάτσε να το δω και σου λέω σε λίγο. Μόνο για να σε προλάβω: το elxis απαιτεί utf-8! Μην αλλάξεις το encoding!
Title: Re: UTF-8 problem
Post by: datahell on November 06, 2006, 14:53:51
Μήπως έχεις βάλει κανένα .htaccess ή κάποια ρύθμιση άλλη στον apache που να καθορίζει το default charset; Δεν είμαι σίγουρος τι φταίει οπότε απλά θα κάνουμε κάποιες δοκιμές:

1. Άνοιξε το index.php αρχείο του template και αντικατέστησε στην κορυφή το <?xml version="1.0"?> με <?xml version="1.0" encoding="UTF-8"?>. Δοκίμασε αν έχει καμία διαφορά.

2.Πρόσθεσε ένα αρχείο .htaccess στον κατάλογο administrator και βάλε μέσα:

AddDefaultCharset UTF-8


Αυτό θα σου δουλέψει σίγουρα αλλά πρέπει να προσέξεις μετά ώστε τα δεδομένα που έρχονται από τη βάση ή αποθηκεύονται σε αυτή να είναι επίσης σωστά. Δες στο phpmyadmin αν τα ελληνικά αποθηκεύονται σωστά.
Title: Re: UTF-8 problem
Post by: NewAge on November 06, 2006, 15:19:14
Nai ontws ston apache eixa balei default charset to iso-8859-7 (ayto pou anoige)
Sto admin den doulevei giati den stelnontai kapou headers ston browser explicitly opote epairne tous default pou estene o apache.
Pros8esa sto administrator/index.php ta ekshs:
if(!headers_sent()) {
    header( 'Content-type: text/html; charset=utf-8' );
    header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
    header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
    header( "Cache-Control: no-store, no-cache, must-revalidate" );
    header( "Cache-Control: post-check=0, pre-check=0", false );
    header( "Pragma: no-cache" );
}
katw apo ton elegxo gia installation kai doulevei mia xara kai sto admin twra
eyxaristw poly
Title: Re: UTF-8 problem
Post by: NewAge on November 06, 2006, 15:20:36
kai sta index2.php kai index3.php to idio ksexasa na pw
Title: Re: UTF-8 problem
Post by: NewAge on November 15, 2006, 12:32:41
Υπάρχει περίπτωση την άνω διόρθωση να την βάλετε σε κάποια έκδοση για να μπορώ να κάνω update τις σελίδες μου κάθε φορά που βγαίνει κάποια καινούργια;

Ευχαριστώ
Title: Re: UTF-8 problem
Post by: datahell on November 15, 2006, 13:20:43
kosmidd θα το κοιτάξω καλύτερα και αν δω ότι πρέπει να υπάρξει κάτι τέτοιο και στη διαχείριση θα το βάλουμε στην κυρίως διανομή. Ευχαριστώ για την επισήμανση.
Title: Re: UTF-8 problem
Post by: NewAge on November 16, 2006, 12:10:11
Συμπληρώνοντας την διόρθωση του άνω θέματος να ενημερώσω κάθε ενδιαφερόμενο ότι χρειάζεται άλλη μία αλλαγή:
Στην index.php στο frontend σε περίπτωση προσπάθειας login του χρήστη πρώτα του επιστρέφει το ανάλογο μήνυμα και μετά στέλνει τους headers για την κωδικοποίηση. Αυτό έχει σαν αποτέλεσμα να στέλνετε κωδικοποίηση διάφορη από αυτή που απαιτεί το elxis εφόσον o server έχει παρόμοιες ρυθμίσεις με τον δικό μου (default charset διάφορο του UTF-8)

Για να διορθωθεί:
Περίπου στη σειρά 203 στο index.php υπάρχει το κάτωθι
if(!headers_sent()) {
    header( 'Content-type: text/html; charset=utf-8' );
    header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
    header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
    header( 'Cache-Control: no-store, no-cache, must-revalidate' );
    header( 'Cache-Control: post-check=0, pre-check=0', false );
    header( 'Pragma: no-cache' );
}

Μετακινήστε όλο αυτό το κομμάτι κώδικα περίπου στη σειρά 120 όπου και στέλνετε το πρώτο output:
/** patch to lessen the impact on templates */
if ($option == 'search') {
   $option = 'com_search';
}

if(!headers_sent()) {
    header( 'Content-type: text/html; charset=utf-8' );
    header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
    header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
    header( 'Cache-Control: no-store, no-cache, must-revalidate' );
    header( 'Cache-Control: post-check=0, pre-check=0', false );
    header( 'Pragma: no-cache' );
}

// frontend login & logout controls
$return = mosGetParam( $_REQUEST, 'return', NULL );
if ($option == "login") {
   $mainframe->login();


Φυσικά και να το βάλετε στην πρώτη σειρά πάλι θα δουλέψει, αλλά με παραξένεψε λίγο ο έλεγχος if(!headers_sent())  που υπονοεί ότι από κάπου αλλού μπορεί να έχουν σταλθεί άλλοι headers. Μιας και δεν είχα το χρόνο να ψάξω αν όντως μπορεί αυτό να γίνει και άρα θα ήταν λάθος η μετακίνηση το κάνετε με δική σας ευθύνη. Ίσως κάποιος develorer από το elxis να ρίξει φως στην υπόθεση. Αν βρω κάτι νεώτερο θα ενημερώσω.
Title: Re: UTF-8 problem
Post by: datahell on November 16, 2006, 12:40:40
Τα headers μπορεί να σταλούν από μία γέφυρα...
Title: Re: UTF-8 problem
Post by: NewAge on November 16, 2006, 16:37:28
Γέφυρα;
Τι εννοείς ακριβώς;
Κάποιο module ή component μπορεί να στειλει headers στο μεσοδιάστημα;
Μετά δηλαδή από τον έλεγχο Login και πριν την γραμμή που originally υπήρχαν τα headers μπορεί κάτι να στείλει headers;
Θα το ψάξω γιατί σίγουρα θα υπάρχει πρόβλημα αν γίνετε αυτό...
Title: Re: UTF-8 problem
Post by: datahell on November 16, 2006, 20:04:59
Όχι, γέφυρα = bridge. Είτε πρόκειται για elxis bridge είτε για τις γνωστές των mambo/joomla. Αν η γεφυρωμένη εφαρμογή δεν γίνεται wrap (βλ. πχ τη γέφυρα του smf) η εφαρμογή (μπορεί να) αποθηκεύεται στη μνήμη (buffer) και γίνεται κατόπιν echo και μετά ακολουθεί ένα exit. Αυτό το exit είναι πριν τα headers του elxis. Αν συμβαίνει το αντίθετο τα headers θα σταλούν 2 φορές  (από την γεφυρωμένη εφαρμογή και το elxis). Για να αποφευχθούν μηνύματα σφάλματος (τα γνωστά headers allready sent... ) έχουμε βάλει αυτό το if εκεί που δεν νομίζω να ενοχλεί σε κάτι. Διόρθωσέ με αν μου διαφεύγει κάτι.
Title: Re: UTF-8 problem
Post by: NewAge on November 18, 2006, 11:06:20
Δεν είχα ασχοληθεί με γέφυρες καθόλου μέχρι τώρα...
Το έψαξα λίγο τώρα και δεν έβγαλα σίγουρα άκρη ακόμα. Θέλω να κάτσω να προσθέσω γέφυρες για να δω σε πιο σημείο γίνονται include και μπορεί να στείλουν headers.
Αν και ποτέ δεν έχει χρειαστεί να προσθέσω γέφυρα σε κανένα installation που έχω κάνει (καμια 15αριά custom εφαρμογές βασισμένες σε mambo/joomla και τώρα 2 σε elxis) φαντάζομαι ότι θα ήταν αρκετά χρήσιμο ειδικά για το site της εταιρίας μου.

Έτσι λίγο που το είδα πάντως νομίζω ότι και εκεί που πρότεινα να είναι οι headers δεν θα επηρεάσουν την λειτουργία του ακόμα και σε περίπτωση προσθήκης γέφυρας. Επιφυλάσσομαι όμως μετά την έρευνα πω με σιγουριά τι παίζει

Ευχαριστώ για την απάντηση
Title: Re: UTF-8 problem
Post by: datahell on November 18, 2006, 18:57:28
Η απάντησή μου αφορά το if statment και όχι τη θέση των headers. Δηλαδή ότι μπορεί να σταλούν headers από μία γέφυρα. Πάντως η επισήμανσή σου για τα headers στη διαχείριση περάστηκε ήδη στο svn μας και θα προστεθεί στην έκδοση 2006.4. Ευχαριστούμε πολύ γι αυτό!  :)
Title: Re: UTF-8 problem
Post by: NewAge on November 19, 2006, 13:04:47
Ξαναδιάβασα τα posts και κατάλαβα το μπέρδεμα. Ναι όντως το έλεγες για το if απο την αρχή και δεν πήρα χαμπάρι εγώ.... Όντως το if φυσικά και δεν ενοχλεί πουθενά... Λάθος μου, και τσάμπα έψαχνα για την θέση αν επιρρεάζει πουθένα... Sorry…
Ευχάριστη η προσθήκη, έτσι θα κάνω update άφοβα τις εφαρμογές μου
Title: Re: UTF-8 problem
Post by: giannismit on November 27, 2006, 03:53:00
Γειά σας,
Χθές το βράδυ εγκατέστησα και εγώ το elxis και είχα ακριβώς το ίδιο πρόβλημα στο cp του admin.
Εκανα τις αλαγές που πρότεινε ο NewAge στα files administrator/index.php, index2.php, index3.php, το encoding είναι ΟΚ.
Εμφανίζετε όμως τα κάτωθι WARNING :

WARNING
PHP: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/html/administrator/index2.php:1)
uri: index2.php
path:
version: Elxis 2006.3 Stable rev1060 [ OpenMind ] 21-October-2006 16:28 GMT+2
WARNING(2): /var/www/html/administrator/index2.php, line 42

Στο httpd.conf του apache έχω "AddDefaultCharset UTF-8"

Ευχαριστώ πάντως για την βοήθεια,

Title: Re: UTF-8 problem
Post by: datahell on November 27, 2006, 08:41:52
Σε λίγες μέρες θα κυκλοφορήσει η έκδοση 2006.4 στην οποία το θέμα έχει λυθεί. Όσον αφορά την προκαθορισμένη κωδικοποίηση που στέλνει ο apache το ενδεδειγμένο (δική μου πρόταση) είναι να ΜΗΝ στέλνει τίποτα για να μην επηρεάζει τα script/σελίδες που τρέχουνε.

Δεν ξέρω που έχεις βάλει τα headers μέσα στον κώδικα του index2.php αλλά δοκίμασε να τα βάλεις πιο κάτω στο αρχείο, περίπου στο τέλος (ακριβώς μετά το initGzip(); )