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

PHP, HTML5 , utf-8 ή iso-8859-7


Lykos22

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

Καλησπέρα, θα ήθελα λίγο μερικές πληροφορίες για το encoding σε μια σελίδα php, μήπως δεν έχω κάνει κάτι σωστά.

Οι ρυθμίσεις που έχω κάνει είναι οι εξής:

α. εχω ορίσει στο phpmyadmin τους πίνακές μου με collation utf8_general_ci
β. στην HTML μέσα στο head χρησιμοποιώ το <meta charset="utf-8"> (ΗΤΜL5)
γ. και επίσης πρίν από κάθε HTML output έχω βάλει: header('Content-type: text/html; charset=UTF-8'); mysql_set_charset('utf8');

Το θέμα μου είναι ότι όταν κάνω insert στη βάση μου μία νέα εγγραφή, πχ κάνω insert το "Δοκιμή ελληνικά" και "Test" στα αγγλικά. Ενώ το "Test" περνάει κανονικά στη βάση και φαίνεται σαν Test και στη βάση και στον browser, το "Δοκιμή ελληνικά" θα μπει στη βάση μου ως:

Δοκιμή Ελληνικά

ή htmlentities($input, ENT_COMPAT, 'UTF-8') έτσι:

Δοκιμή Ε&lamb

και στο browser αυτό που βλέπω είναι: Δοκιμή Ε&lamb, επειδή είχα ορισει το πεδίο με varchar(50)

Εαν υπάρχει κάποιο λάθος σε αυτό πώς μπορώ να το διορθώσω ώστε να αποθηκεύονται και τα ελληνικά "σωστά" στη βάση μου?
Και επίσης εαν αντι του utf-8 χρησιμοποιήσω header("Content-Type: text/html; charset=iso-8859-7");
και βάλλω σαν collation greek_general_ci στη βάση μου, θα έχω την ίδια υποστήριξη σε ελληνικά και αγγλικά ή όχι?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μια χαρά τα έχεις κάνει όλα, αλλά προφανώς το πρόβλημα υπάρχει στην σύνδεση που κάνεις το αρχεία σου με την βάση σου.

 

Βάλε το παρακάτω κώδικα, στον κώδικα όπου συνδέεσαι στην βάση σου από την php

mysql_query('set character set utf8',$link);
mysql_query("SET NAMES 'utf8'",$link);

όπου το $link είναι το

$link = mysql_connect($HOST, $USERNAME, $PASSWORD);
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες


Σε ευχαριστώ πολύ για την απάντηση!

 

Το έκανα όπως είπες, και το τέσταρα. Περνάει τα ελληνικά γράμματα στη βάση "κανονικά" :-) και όχι σαν "σύμβολα".

 

Μία ακόμα ερώτηση, αν μπορείς να μου απαντήσεις:

 

- Εαν αντι του utf-8 χρησιμοποιήσω iso-8859-7, επομένως θα είναι:

 

α. header("Content-Type: text/html; charset=iso-8859-7");

 

β. meta το ιδιο και στις συναρτίσεις που μου δωσες

 

γ. και collation: greek_general_ci

 

έτσι θα χάσω την υποστήριξη στα αγγλικά, ή όχι?? Δηλαδη αν πχ περνάω στο πεδίο name τα ονόματα "Γιώργος" και "Jimmy" θα χω πρόβλημα με τα αγγλικά??

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@Crawl_From_Death

Ευχαριστούμε για την σημειώση!

 

@Lykos22

Λογικά όχι δεν θα έχεις πρόβλημα με τα Ελληνικά και Αγγλικά αλλά γιατί να το κάνεις αυτό όταν με utf-8 καθαρίζεις;;!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@Uberalles_gr

 

Δεν διαφωνώ σε αυτό που λες, απλά αν αντί για utf-8 χρησιμοποιήσω iso-8859-7, (και εφόσον είμαι σίγουρος ότι χρειάζομαι υποστήριξη  μόνο για ελληνικά-αγγλικά) δεν περιορίζω κάπως το εύρος των χαρακτήρων - άρα γλιτώνω κάποια λίγη μνήμη?

Διόρθωσέ με αν κάνω λάθος.

 

@Crawl_From_Death, Uberalles_gr

ήθελα να ρωτήσω κάτι σχετικό εδώ και καιρό.

 

- δηλαδή "γυρνάμε" σε mysqli που είναι πλέον πιο ασφαλές? άρα όλες η συναρτήσεις mysql_* (mysql_connect, mysql_query, etc etc) θα γίνονται mysqli_*

 

- οι συναρτήσεις mysql_pconnect (αντί mysql_connect) & mysql_free_result, χρειάζεται να τις χρησιμοποιώ, ώς καλύτερα ή όχι??

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

- δηλαδή "γυρνάμε" σε mysqli που είναι πλέον πιο ασφαλές? άρα όλες η συναρτήσεις mysql_* (mysql_connect, mysql_query, etc etc) θα γίνονται mysqli_*

 

 

- οι συναρτήσεις mysql_pconnect (αντί mysql_connect) & mysql_free_result, χρειάζεται να τις χρησιμοποιώ, ώς καλύτερα ή όχι??

 

Η mysqli είναι η object oriented έκδοση. Άρα τις καλείς λίγο διαφορετικά.

Ρίξε μια ματιά εδώ: http://codular.com/php-mysqli

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η mysqli είναι η object oriented έκδοση. Άρα τις καλείς λίγο διαφορετικά.

Ρίξε μια ματιά εδώ: http://codular.com/php-mysqli

σε απλή PHP (όχι OOP) δηλαδή χρησιμοποιώ κανονικά το mysql???

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

σε απλή PHP (όχι OOP) δηλαδή χρησιμοποιώ κανονικά το mysql???

 

Μπορείς ακόμη και σε απλή php να χρησιμοποιείσεις  objects που υπάρχουν για να σου κάνουν την ζωή πιο εύκολη. Γενικά ψάξε και διάβασε λίγο για να βγάλεις άκρη, μην περιμένεις από μια απάντηση σε ένα forum να σου λυθούν όλες οι απορίες.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@Uberalles_gr

 

Δεν διαφωνώ σε αυτό που λες, απλά αν αντί για utf-8 χρησιμοποιήσω iso-8859-7, (και εφόσον είμαι σίγουρος ότι χρειάζομαι υποστήριξη  μόνο για ελληνικά-αγγλικά) δεν περιορίζω κάπως το εύρος των χαρακτήρων - άρα γλιτώνω κάποια λίγη μνήμη?

Αυτη την σελιδα που βλεπεις τωρα (χωρις το ποστ μου) ειναι 156.465 byte σε utf8 και 146.363 byte σε ansi ( Μονο κειμενο ετσι)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@Uberalles_gr

 

Δεν διαφωνώ σε αυτό που λες, απλά αν αντί για utf-8 χρησιμοποιήσω iso-8859-7, (και εφόσον είμαι σίγουρος ότι χρειάζομαι υποστήριξη  μόνο για ελληνικά-αγγλικά) δεν περιορίζω κάπως το εύρος των χαρακτήρων - άρα γλιτώνω κάποια λίγη μνήμη?

Διόρθωσέ με αν κάνω λάθος.

 

Γλυτώνεις 1 byte για κάθε ένα ελληνικό χαρακτήρα (2 bytes σε utf-8, 1 σε 8859-7). Όμως αυτός είναι μάλλον λάθος τρόπος να πάρεις την απόφασή σου. Τι ακριβώς είναι αυτό που περιμένεις να βελτιώσεις κάνοντας οικονομία στα bytes?

  • Χρήση μνήμης από την PHP? Γενικά αυτή μετριέται σε δεκάδες MB. Αν εσύ γλυτώσεις λίγα KB αφήνοντας το utf-8 στην άκρη, ρεαλιστικά υπάρχει διαφορά;
  • Λιγότερα δεδομένα που πρέπει να περάσουν από το δίκτυο? Αν είναι έτσι, τότε θα πρέπει ήδη να έχεις ενεργοποιήσει gzip compression και να έχεις βελτιστοποιήσει τους caching headers σου προτού βρεθούμε να μιλάμε για τα ψωροbytes των ελληνικών.

 

@Crawl_From_Death, Uberalles_gr

ήθελα να ρωτήσω κάτι σχετικό εδώ και καιρό.

 

- δηλαδή "γυρνάμε" σε mysqli που είναι πλέον πιο ασφαλές? άρα όλες η συναρτήσεις mysql_* (mysql_connect, mysql_query, etc etc) θα γίνονται mysqli_*

 

- οι συναρτήσεις mysql_pconnect (αντί mysql_connect) & mysql_free_result, χρειάζεται να τις χρησιμοποιώ, ώς καλύτερα ή όχι??

 

Γυρνάμε οπωσδήποτε σε mysqli, ή αν προτιμάς σε PDO.

 

Η mysql_pconnect είναι μια συνάρτηση για την οποία αν χρειάζεται να ρωτήσεις τότε σίγουρα δε σου χρειάζεται να τη χρησιμοποιήσεις.

 

Η mysql_free_result έχει νόημα μόνο όταν έχεις ένα script που κάνει πολλά queries με πολλά αποτελέσματα στο καθένα και θέλεις να μειώσεις τη χρήση μνήμης κατά τη διάρκεια εκτέλεσης του script. Πρακτικά δε θα τη χρειαστείς "ποτέ".

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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