Acrobase  

Καλώς ήρθατε στην AcroBase.
Δείτε εδώ τα πιο πρόσφατα μηνύματα από όλες τις περιοχές συζητήσεων, καθώς και όλες τις υπηρεσίες της AcroBase.
H εγγραφή σας είναι γρήγορη και εύκολη.

Επιστροφή   Acrobase > Υπολογιστές και Τεχνολογία > Πληροφορική και Επικοινωνία
Ομάδες (Groups) Τοίχος Άρθρα acrobase.org Ημερολόγιο Φωτογραφίες Στατιστικά

Notices

Δεν έχετε δημιουργήσει όνομα χρήστη στην Acrobase.
Μπορείτε να το δημιουργήσετε εδώ

Απάντηση στο θέμα
 
Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 20-02-09, 12:47
Το avatar του χρήστη Diamond
Diamond Ο χρήστης Diamond δεν είναι συνδεδεμένος
Mika Vyko's Vozht
 

Τελευταία φορά Online: 19-01-21 19:02
Φύλο: Άντρας
Η διαθεσή μου τώρα:
Php to Excel και πρόβλημα με τα Ελληνικά...

Φτιάχνω κάποια modules για την πλατφόρμα μου και έχω την εξής σπαζοκεφαλιά...

Πρακτικά χρησιμοποιώ τους header του αρχείου ώστε να πω στον browser να κατεβάσει το table που εμφανίζω με τη μορφή excel αρχείου...
Τουτέστιν
Κώδικας PHP:
header("Content-Type: application/vnd.ms-excel; name='excel'");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=volunteers.xls");
header("Pragma: no-cache");
header("Expires: 0"); 
Και πάμε τώρα στη σπαζοκεφαλιά...
Αν σώσω το αρχείο σε UTF-8 ο apache γκρινιάζει γιατί προσπαθώ να πειράξω τον header
Κώδικας PHP:
<Content-Typetext/htmlcharset=utf-8
τον οποίο βάζει αυτόματα με το που θα δει το αρχείο (δεν το κάνει σε όλα τα hostings που έχω αλλά δεν μπορώ να βασιστώ σε αυτό).
Οπότε...
Σώζω το αρχείο σε ANSI και παίζω με ISO-8859-7 για να εμφανίσω τη σελίδα...
Τα δεδομένα στην database βέβαια είναι σε UTF-8 οπότε χρειάστηκε να φτιάξω μία ρουτίνα η οποία μεταφράζει τα UTF-8 σε iso-8859-7 on the fly πριν τα εμφανίσω στη σελίδα μου...
Το θέμα βέβαια περιπλέκεται γιατί... το excel δεν βλέπει ελληνικά αν τα περάσω σαν iso-8859-7 ή windows-1253 (δοκίμασα μέχρι και αυτό με μετατροπή φυσικά των χαρακτήρων από UTF-8 σε Windows-1253).

Από ότι είδα, στους servers όπου δεν κολλάνε το
Κώδικας PHP:
<Content-Typetext/htmlcharset=utf-8
από μόνοι τους, έτσι και περάσω τα ελληνικά κατευθείαν από τη βάση στο excel με UTF-8 τα βλέπω κανονικά...

Μία βοήθεια μήπως και έχω φάει κάποιο κόλλημα και δεν βλέπω κάτι προφανές;
__________________
Για λόγους οικονομίας έσβησε το φως στο τούνελ...
Απάντηση με παράθεση
  #2  
Παλιά 20-02-09, 13:45
Qluser Ο χρήστης Qluser δεν είναι συνδεδεμένος
Μέλος
 

Τελευταία φορά Online: 24-02-23 18:01
Αρχική Δημοσίευση από Diamond Εμφάνιση μηνυμάτων
Κώδικας PHP:
header("Content-Type: application/vnd.ms-excel; name='excel'");
header("Content-Type: application/octet-stream"); 
Αυτό είναι σίγουρα λάθος, μπορείς να έχεις μόνο ένα Content-Type header.

RFC2616:
4.2 Message Headers
[...]
Multiple message-header fields with the same field-name MAY be
present in a message if and only if the entire field-value for that
header field is defined as a comma-separated list [i.e., #(values)].
[...]
14.17 Content-Type

The Content-Type entity-header field indicates the media type of the
entity-body sent to the recipient or, in the case of the HEAD method,
the media type that would have been sent had the request been a GET.

Content-Type = "Content-Type" ":" media-type
Αρχική Δημοσίευση από Diamond Εμφάνιση μηνυμάτων
Αν σώσω το αρχείο σε UTF-8 ο apache γκρινιάζει γιατί προσπαθώ να πειράξω τον header
Κώδικας PHP:
<Content-Typetext/htmlcharset=utf-8
Αυτό μάλλον δείχνει ότι το PHP script στέλνει κάποιο output πριν τα headers. Απ'ότι λέει το FM:

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
Λ.
Απάντηση με παράθεση
  #3  
Παλιά 20-02-09, 14:23
Το avatar του χρήστη Diamond
Diamond Ο χρήστης Diamond δεν είναι συνδεδεμένος
Mika Vyko's Vozht
 

Τελευταία φορά Online: 19-01-21 19:02
Φύλο: Άντρας
Η διαθεσή μου τώρα:
Αρχική Δημοσίευση από Qluser Εμφάνιση μηνυμάτων
Αυτό είναι σίγουρα λάθος, μπορείς να έχεις μόνο ένα Content-Type header.
Καλά, από εχθές που πονοκεφαλιάζω έχουν μείνει διάφορα κατάλοιπα στη σελίδα... Από την απόγνωση έχω βάλει και άχρηστα πράγματα, σαν αυτό που επισημαίνεις...

Αρχική Δημοσίευση από Qluser Εμφάνιση μηνυμάτων
Αυτό μάλλον δείχνει ότι το PHP script στέλνει κάποιο output πριν τα headers. Απ'ότι λέει το FM:
Λ.

Για κάποιο λόγο, αν σώσεις τη σελίδα σε UTF-8 ο server βλέπει κάποιο whitespace κάπου στην αρχή και δηλώνει content-type: Text/html...
Αυτό το γλυτώνεις μόνο αν σώσεις τη σελίδα σε ANSI που τελικά δεν μας κάνει σαν λύση...
Έχω προσπαθήσει να γράψω μέχρι και
Κώδικας PHP:
<?header("Content-Type: application/vnd.ms-excel; name='excel'");?>
αλλά αυτό το χαβά του...
__________________
Για λόγους οικονομίας έσβησε το φως στο τούνελ...
Απάντηση με παράθεση
  #4  
Παλιά 21-02-09, 13:15
avel Ο χρήστης avel δεν είναι συνδεδεμένος
Mέλος
 

Φύλο: Δεν έχω αποφασίσει ακόμα
Αρχική Δημοσίευση από Diamond Εμφάνιση μηνυμάτων
Αν σώσω το αρχείο σε UTF-8 ο apache γκρινιάζει γιατί προσπαθώ να πειράξω τον header
Κώδικας PHP:
<Content-Typetext/htmlcharset=utf-8
τον οποίο βάζει αυτόματα με το που θα δει το αρχείο (δεν το κάνει σε όλα τα hostings που έχω αλλά δεν μπορώ να βασιστώ σε αυτό).
Είσαι σίγουρος ότι είναι ο Apache που βάζει ένα τόσο άκυρο header? Φτιάξε το httpd.conf σου τότε. Το AddDefaultCharset στο configuration του Apache είναι πηγή πολλών προβλημάτων. Απενεργοποίησέ το. Το ίδιο και το default_charset στο php.ini.
Απάντηση με παράθεση
Οι παρακάτω χρήστες έχουν πει 'Ευχαριστώ' στον/στην avel για αυτό το μήνυμα:
Diamond (25-02-09)
  #5  
Παλιά 21-02-09, 13:20
avel Ο χρήστης avel δεν είναι συνδεδεμένος
Mέλος
 

Φύλο: Δεν έχω αποφασίσει ακόμα
Αρχική Δημοσίευση από Diamond Εμφάνιση μηνυμάτων
Κώδικας PHP:
<?header("Content-Type: application/vnd.ms-excel; name='excel'");?>
Σίγουρα δε θα περιμένεις από Windows & IE να αποδεχθούν τον MIME header, έτσι δεν είναι;

Το όνομα του αρχείου πρέπει να περιέχει το κατάλληλο filename extension.
Απάντηση με παράθεση
  #6  
Παλιά 25-02-09, 11:17
Το avatar του χρήστη Diamond
Diamond Ο χρήστης Diamond δεν είναι συνδεδεμένος
Mika Vyko's Vozht
 

Τελευταία φορά Online: 19-01-21 19:02
Φύλο: Άντρας
Η διαθεσή μου τώρα:
Αρχική Δημοσίευση από avel Εμφάνιση μηνυμάτων
Είσαι σίγουρος ότι είναι ο Apache που βάζει ένα τόσο άκυρο header? Φτιάξε το httpd.conf σου τότε. Το AddDefaultCharset στο configuration του Apache είναι πηγή πολλών προβλημάτων. Απενεργοποίησέ το. Το ίδιο και το default_charset στο php.ini.
Εκεί καταλήγω... Γιατί στο local server που έχω στήσει δεν έχω αυτό το θέμα ενώ όταν το ανεβάζω στο internet δημιουργείται...



Αρχική Δημοσίευση από avel Εμφάνιση μηνυμάτων
Σίγουρα δε θα περιμένεις από Windows & IE να αποδεχθούν τον MIME header, έτσι δεν είναι;

Το όνομα του αρχείου πρέπει να περιέχει το κατάλληλο filename extension.
Το filename extension το δηλώνω στο header
Κώδικας PHP:
header("Content-Disposition: attachment; filename=volunteers.xls"); 

Θα δω κατά πόσο μπορώ να συνεννοηθώ με τους τύπους που έχουν τον server... Ή να δημιουργήσω δικό μου php.ini για τις σελίδες μου... Νομίζω ότι γίνεται...
__________________
Για λόγους οικονομίας έσβησε το φως στο τούνελ...
Απάντηση με παράθεση
  #7  
Παλιά 25-02-09, 14:24
Το avatar του χρήστη Diamond
Diamond Ο χρήστης Diamond δεν είναι συνδεδεμένος
Mika Vyko's Vozht
 

Τελευταία φορά Online: 19-01-21 19:02
Φύλο: Άντρας
Η διαθεσή μου τώρα:
Λοιπόν!
Λύθηκε το θέμα ως εξής...
Το πρόβλημα δημιουργείται από το BOM (Byte order mark) το οποίο μπαίνει από μόνο του στα αρχεία UTF-8 ώστε να δηλώσει το charset...
Αυτό είναι τα πρώτα 3 bytes του αρχείου τα οποία μπορούν
1) Να διαγραφούν μέσω ενός hex editor
2) Να ρυθμιστεί ο editor ώστε να μην τα βάλει, φτάνει να μας δίνει αυτή την επιλογή
3) Να διαγραφούν μέσω ενός script το οποίο θα παραβλέπει τα 3 πρώτα bytes κατά την εγγραφή του αρχείου στο δίσκο...

Το 1 υποθέτω δεν θέλει οδηγίες...
Για το 2 βρήκα το notepad++ το οποίο το κάνει...
Για το 3 έγραψα ένα απλό script...

Κώδικας PHP:
<?php
  $Input_file 
"excel.php";
  
$Output_file "new_excel.php";

  if (
$Input fopen($Input_file"r"))  {
    if (
$Output fopen($Output_file"w"))  {
      
$Counter 0;
      while (
$Byte fgetc($Input))
        if (
$Counter++ > 2)
         
fwrite($Output$Byte);
      
fclose($Output);
    }  else echo 
"Λάθος κατά την εγγραφή\n";
    
fclose($Input);
  }  else echo 
"Λάθος κατά την ανάγνωση\n"?>
Ε τώρα θα μου πείτε γιατί έψαξα και βρήκα 3 λύσεις...
Είπε κανείς ότι αυτοί που ασχολούνται με τον προγραμματισμό πάνε καλά;
__________________
Για λόγους οικονομίας έσβησε το φως στο τούνελ...
Απάντηση με παράθεση
  #8  
Παλιά 25-02-09, 17:10
Qluser Ο χρήστης Qluser δεν είναι συνδεδεμένος
Μέλος
 

Τελευταία φορά Online: 24-02-23 18:01
Αρχική Δημοσίευση από Diamond Εμφάνιση μηνυμάτων
Το πρόβλημα δημιουργείται από το BOM (Byte order mark)
Ενδιαφέρον!

το οποίο μπαίνει από μόνο του στα αρχεία UTF-8 ώστε να δηλώσει το charset...
Η χρήση του είναι για να δηλώσει το byte sex αλλά αυτό δεν έχει καμμία χρησιμότητα σε UTF-8 (πηγή: http://en.wikipedia.org/wiki/Byte-order_mark), και προφανώς δεν είναι αυτοφυές αλλά το βάζει ο editor. Δεν το βάζουν όλοι όμως - πχ ένα που έφτιαξα τώρα με vim:
Κώδικας:
$ cat foo.txt  
ΑΒΓ ABC
$ file foo.txt
foo.txt: UTF-8 Unicode text
$ cat foo.txt
ΑΒΓ ABC
$ od -h foo.txt 
0000000 91ce 92ce 93ce 4120 4342 000a
0000013
Αυτό είναι τα πρώτα 3 bytes του αρχείου τα οποία μπορούν
1) Να διαγραφούν μέσω ενός hex editor
2) Να ρυθμιστεί ο editor ώστε να μην τα βάλει, φτάνει να μας δίνει αυτή την επιλογή
3) Να διαγραφούν μέσω ενός script το οποίο θα παραβλέπει τα 3 πρώτα bytes κατά την εγγραφή του αρχείου στο δίσκο...
4) Να αγνοήσει ή να χειριστεί κατάλληλα το BOM ο PHP interpreter (πολλά bugs).

Λ.
Απάντηση με παράθεση
  #9  
Παλιά 26-02-09, 10:43
Το avatar του χρήστη Diamond
Diamond Ο χρήστης Diamond δεν είναι συνδεδεμένος
Mika Vyko's Vozht
 

Τελευταία φορά Online: 19-01-21 19:02
Φύλο: Άντρας
Η διαθεσή μου τώρα:
Αρχική Δημοσίευση από Qluser Εμφάνιση μηνυμάτων
Η χρήση του είναι για να δηλώσει το byte sex αλλά αυτό δεν έχει καμμία χρησιμότητα σε UTF-8 (πηγή: http://en.wikipedia.org/wiki/Byte-order_mark), και προφανώς δεν είναι αυτοφυές αλλά το βάζει ο editor.
Ακριβώς...
Εκεί βασίζεται η λύση 2) όπου κάποιοι editors δεν το βάζουν καθόλου ή το βάζουν αν εσύ το επιλέξεις... (π.χ. notepad++)


Αρχική Δημοσίευση από Qluser Εμφάνιση μηνυμάτων
4) Να αγνοήσει ή να χειριστεί κατάλληλα το BOM ο PHP interpreter (πολλά bugs).

Λ.
Αυτό ξαναπές το... Αλλά δεν μπορείς να πεις στον πελάτη να περιμένει να διορθώσουν το bug...
Στο local server που έχω για να στήνω τις σελίδες που φτιάχνω γιατί πολλά sites έχουν μέγεθος >1GB δεν είχα κανένα πρόβλημα με την Php 5.2.1.
Όταν ανέβαζα τις σελίδες στον κανονικό server όπου έχει php v 5.2.6 έσκαγε το σύμπαν!
__________________
Για λόγους οικονομίας έσβησε το φως στο τούνελ...
Απάντηση με παράθεση
Απάντηση στο θέμα


Συνδεδεμένοι χρήστες που διαβάζουν αυτό το θέμα: 1 (0 μέλη και 1 επισκέπτες)
 
Εργαλεία Θεμάτων
Τρόποι εμφάνισης

Δικαιώματα - Επιλογές
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι σε λειτουργία

Που θέλετε να σας πάμε;


Όλες οι ώρες είναι GMT +3. Η ώρα τώρα είναι 19:12.



Forum engine powered by : vBulletin Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.