Firefox.vs.IE problem header("Content-Type: charset=utf-8")

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
nastis
Δημοσιεύσεις: 124
Εγγραφή: 16 Φεβ 2005 16:28
Επικοινωνία:

Firefox.vs.IE problem header("Content-Type: charset=utf-8")

Δημοσίευση από nastis » 05 Ιουν 2007 23:14

Έχω ένα πρόβλημα που μου προέκυψε σε ανύποπτη στιγμή.

στο site www.oktonia.com έχω ένα scriptaki download.php που απλά φτύνει το αρχείο με το όνομα που θέλω βασισμένο στο id του αρχείου.
π.χ.
http://www.oktonia.com/download.php?file=3977.pdf
Θα δώσει "ΑΣΕΠ - ΓΝΩΣΤΙΚΟ ΔΑΣΚΑΛΩΝ.pdf"

Το αρχείο download.php έχει ~ τα παρακάτω..

Κώδικας: Επιλογή όλων

  
    
     header("Content-disposition: attachment;filename=\"".strip_tags("ΕΝΑΣ ΤΙΤΛΟΣ ΣΤΑ ΕΛΛΗΝΙΚΑ").".$file_ext\"");
     header("Content-type: application/force-download");
     header("Content-Type: application/octet-stream");
     header("Content-Transfer-Encoding: Binary");
     header("Content-Type: charset=utf-8"); // auto edw den allazei ta pragmata
     header("Content-length: ".filesize($file)); // όπου $file το σωστό αρχείο απο το Filesystem
    readfile($file);
Ενώ σε ff Μου δουλεύει οκ και δίνει τίτλο για download στα Ελληνικά , στον IE μου δίνει το γνωστό κινέζικο του utf8.

Τα πράγματα που έκανα προσφάτως είναι να αλλάξω την βάση και τα αρχεία σε utf8 από latin1 που ήταν παλιά.
Αλλά προσπαθώ να κάνω σε παλιότερο backup με greek iso και πάλι δεν τα καταφέρνω να μου δώσει σωστό όνομα.
Παλιότερα σίγουρα δουλευε ωστόσο καλά.

Σημείωση : το αρχείο είναι σίγουρα σε utf8 encoding
Δοκίμασα να αλλάξω το header("Content-Type: charset=utf-8") σε greek iso
επίσης δοκίμασα να το περάσω από τις function tou cpulse που αναφέρονται στο
http://www.freestuff.gr/forums/viewtopic.php?p=246260
δοκίμασα να αλλάξω με iconv, αλλα τίποτα.
Βασικά ΕΙΝΑΙ utf8, απλά σαν να έχει πρόβλημα να πειστεί ο ΙΕ

Καμια ιδέα??

B.
www.oktonia.com - Παγκόσμιο Χωριό Γνώσης Λυμένα Θέματα Εξετάσεων - Ασκήσεις

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Firefox.vs.IE problem header("Content-Type: charset=utf-8")

Δημοσίευση από skeftomilos » 05 Ιουν 2007 23:47

nastis έγραψε:Βασικά ΕΙΝΑΙ utf8
Τι ακριβώς είναι utf8, το PHP αρχείο; Για το PDF αρχείο δε νομίζω να έχει νόημα να πούμε ότι είναι utf8, καθώς δεν πρόκειται για κοινό text format.

Η ιδιαιτερότητα της περίπτωσης είναι ότι υπάρχουν ελληνικοί χαρακτήρες μέσα στους HTTP headers. Ίσως να μην επιτρέπεται κατι τέτοιο.

Με κάθε επιφύλαξη, το HTTP πρωτόκολλο αποτελείται από χαρακτήρες US-ASCII.

- HTTP - Notational Conventions and Generic Grammar
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

nastis
Δημοσιεύσεις: 124
Εγγραφή: 16 Φεβ 2005 16:28
Επικοινωνία:

Firefox.vs.IE problem header("Content-Type: charset=utf-8")

Δημοσίευση από nastis » 06 Ιουν 2007 00:01

skeftomilos καταρχήν thnx για την απάντηση.

Αυτό που λέω είναι utf8 εννοώ το αρχείο και το αποτέλεσμα από την βάση και όχι το pdf προφανώς. Αμα δεν του κάνω readfile και του δώσω echo στον browser θα μου το δώσει με το σωστό encoding.(δηλαδή διαβάζεται).

Θα μελετήσω λίγο το rfc τώρα.

Το περίεργο είναι ότι 1) δουλεύει σε FF και όχι σε IE
2) ότι είμαι βέβαιως ότι με παλαιότερα δουλεύε ΚΑΙ στον IE, αλλά δεν μπορώ να εντοπίσω την αλλαγή που είχα κάνει.

Ευχαριστώ
Β.
www.oktonia.com - Παγκόσμιο Χωριό Γνώσης Λυμένα Θέματα Εξετάσεων - Ασκήσεις

nastis
Δημοσιεύσεις: 124
Εγγραφή: 16 Φεβ 2005 16:28
Επικοινωνία:

Firefox.vs.IE problem header("Content-Type: charset=utf-8")

Δημοσίευση από nastis » 06 Ιουν 2007 00:28

Νομίζω βρήκα λύση..
Λοιπόν διαβάζοντας το παρακάτω

"Display a non-US-ASCII filename in File Download dialog box"
http://www.codeproject.com/aspnet/NonUSASCII.asp

έκανα ένα urlencode τον τίτλο μου και δούλεψε.

Αλλά ο FF τα έβγαζε urlencoded (δηλαδη %CE%94%CE%99%CE%A0%CE%9B%CE%9F+%CE%9F%CE )
οπότε του έβαλα και ένα detection για browser και μετά το περνάω από το αντίστοιχο...

Κώδικας: Επιλογή όλων

     
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
     header("Content-disposition: attachment;filename=\"".strip_tags(urlencode("ΕΛΛΗΝΙΚΟΣ ΤΙΤΛΟΣ")).".$file_ext\"");
     else
     header("Content-disposition: attachment;filename=\"".strip_tags("ΕΛΛΗΝΙΚΟΣ ΤΙΤΛΟΣ").".$file_ext\"");

Ευχαριστώ
Β.
www.oktonia.com - Παγκόσμιο Χωριό Γνώσης Λυμένα Θέματα Εξετάσεων - Ασκήσεις

Άβαταρ μέλους
greek_manager
Honorary Member
Δημοσιεύσεις: 1243
Εγγραφή: 21 Οκτ 2002 19:01
Τοποθεσία: Back to Greece
Επικοινωνία:

Firefox.vs.IE problem header("Content-Type: charset=utf-8")

Δημοσίευση από greek_manager » 21 Ιαν 2009 11:34

Eπειδή ακριβώς το ίδιο πρόβλημα είχα σε μια εφαρμογή Java, ο κώδικας που μου δούλεψε είναι αυτός:

Κώδικας: Επιλογή όλων

                              String userAgent = ServletActionContext.getRequest().getHeader ( "User-Agent" );

                              

                              if (userAgent.indexOf("MSIE")>-1) {

                                    filename=URLEncoder.encode(filename, "UTF-8");

                              }

                              else

                                    filename =new String(filename.getBytes("UTF-8"), "ISO-8859-1"); 
Thanks για το hint πάντως, δεν ήξερα ότι το filename δέχεται μόνο ASCII chars :wink:
aka thkouk
Football Manager - H ελληνική κοινότητα
παιχνιδια στρατηγικης - Παίξε Δωρεάν

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης