Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω ένα πρόβλημα με το encoding... Βάζω στον κώδικά μου αυτό

>
<?php
setlocale(LC_CTYPE, 'greek');
setlocale(LC_TIME, 'greek');
$date = strftime (" %A - %d %b. %Y");
echo $date;
?>

 

και όταν βάζω

>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="el">

δεν μου εμφανίζει την ημερομηνία παρά μόνο ��������, ενώ όταν βγάλω το utf-8 μου αναγνωρίζει την ημερομηνία αλλά τίποτα άλλο ελληνικό...

 

Υπάρχει λύση;

Δημοσ. (επεξεργασμένο)

Κατ' αρχήν οι locale-based συναρτήσεις όπως η strftime δεν είναι κατάλληλες για σοβαρή δουλειά (π.χ. καλή τύχη αν θέλεις να βγάλεις "1 Δεκεμβρίου 2012"), οπότε όπου χρειάζεται σοβαρή δουλειά χρησιμοποιείς custom.

 

Επιπλέον τo locale που χρησιμοποιείς ("greek") ισχύει αν θυμάμαι καλά μόνο σε Windows, οπότε μεταφέροντας τον κώδικα σε Linux φαντάζομαι ότι θα σταματήσει να δουλεύει ακόμα και μισο-σωστά. Αφήνω μια πισινή ότι μπορεί να κάνω λάθος γιατί δεν ασχολούμαι ιδιαίτερα, όπως είπα δεν έχει νόημα να ασχολείσαι με C locales γιατί σε περιβάλλον web απλά δεν σε καλύπτουν.

 

Σχετικά με το πρόβλημά σου: η locale που χρησιμοποιείς έχει single-byte encoding, το Windows-1253 (κάπου στο MSDN τα λέει αυτά αλλά είναι πιο δύσκολο απ' ότι θα έπρεπε για να το βρω). Προφανώς και δεν θα δουλέψει σωστά αν κάνεις echo το αποτέλεσμα σε μια σελίδα UTF-8. Αν ήθελες να το κάνεις να δουλέψει, η ελάχιστη σωστή αλλαγή θα ήταν μια μετατροπή με iconv ή mb_convert_encoding:

 

>$date = strftime (" %A - %d %b. %Y");
echo iconv('Windows-1253', 'UTF-8', $date);

 

Τέλος καλό θα ήταν αν έχεις τη δυνατότητα να μην καθορίζεις το encoding με το <meta> tag (παραλείπω μακροσκελή τεχνική γκρίνια) και να χρησιμοποιείς το απείρως προτιμότερο

 

>header('Content-Type: text/html; charset=utf-8');

Επεξ/σία από defacer
  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...