Ζητήματα UTF-8 BOM που πρέπει να προσέξετε στο Wordpress Αντιμετώπισα ένα πρόβλημα πολύ νωρίς, δηλαδή, μετά την εγκατάσταση ενός συγκεκριμένου πρόσθετου, θα εμφανιζόταν μια λευκή οθόνη αφού έκανα κλικ για ενεργοποίηση. Ποτέ δεν κατάλαβα ποιος είναι ο λόγος και η προηγούμενη λύση είναι ότι εάν δεν περιέχει κινεζικούς χαρακτήρες, μεταφέρετε απευθείας το αρχείο στον κώδικα ASCII, ο οποίος γενικά μπορεί να λυθεί. Όταν πήρα ένα blog για τον αδερφό μου σήμερα, αυτή η κατάσταση συνέβη ξανά. Μετά από πολύ καιρό έρευνας, βρήκα τελικά την απάντηση.
Υπάρχει μια έννοια του BOM στην προδιαγραφή Unicode. BOM - Byte Order Mark, το οποίο είναι το σήμα σειράς byte. Βρείτε μια σημείωση για το BOM εδώ:
Στον κώδικα UCS υπάρχει ένας χαρακτήρας που ονομάζεται "ZERO WIDTH NO-BREAK SPACE", ο οποίος κωδικοποιείται ως FEFF. Το FFFE είναι ένας ανύπαρκτος χαρακτήρας στο UCS, επομένως δεν πρέπει να εμφανίζεται στην πραγματική μετάδοση. Η προδιαγραφή UCS συνιστά να μεταφέρουμε τον χαρακτήρα "ZERO WIDTH NO-BREAK SPACE" πριν από τη μετάδοση της ροής byte. Με αυτόν τον τρόπο, εάν ο δέκτης λάβει ένα FEFF, υποδεικνύει ότι η ροή byte είναι Big-Endian. Εάν ληφθεί το FFFE, σημαίνει ότι η ροή byte είναι Little-Endian. Επομένως, ο χαρακτήρας "ZERO WIDTH NO-BREAK SPACE" ονομάζεται επίσης BOM.
Το UTF-8 δεν απαιτεί BOM για να υποδείξει τη σειρά byte, αλλά μπορεί να χρησιμοποιήσει ένα BOM για να υποδείξει πώς κωδικοποιείται. Η κωδικοποίηση UTF-8 του χαρακτήρα "ZERO WIDTH NO-BREAK SPACE" είναι EF BB BF. Έτσι, εάν ο δέκτης λάβει μια ροή byte που ξεκινά με EF BB BF, γνωρίζει ότι πρόκειται για κωδικοποίηση UTF-8.
Τα Windows χρησιμοποιούν το BOM για να επισημάνουν τον τρόπο κωδικοποίησης των αρχείων κειμένου.
Επιπλέον, το FAQ-BOM στον ιστότοπο unicode εξηγεί λεπτομερώς το BOM. Η επίσημη φυσική αρχή, αλλά στα αγγλικά, φαίνεται να είναι πιο επίπονη.
Σε ένα κωδικοποιημένο αρχείο UTF-8, το BOM καταλαμβάνει τρία byte. Εάν χρησιμοποιείτε το Σημειωματάριο για να αποθηκεύσετε ένα αρχείο κειμένου ως κωδικοποίηση UTF-8, ανοίξτε το αρχείο με UE και μεταβείτε στη δεκαεξαδική κατάσταση επεξεργασίας για να δείτε το FFFE στην αρχή. Αυτός είναι ένας καλός τρόπος για να αναγνωρίσετε αρχεία με κωδικοποίηση UTF-8, το λογισμικό χρησιμοποιεί το BOM για να προσδιορίσει εάν το αρχείο είναι κωδικοποιημένο UTF-8 και πολλά λογισμικά απαιτούν επίσης το εισαγόμενο αρχείο να έχει BOM. Ωστόσο, υπάρχει ακόμα πολύ λογισμικό που δεν αναγνωρίζει το BOM. Όταν ερευνούσα τον Firefox, ήξερα ότι στις πρώτες εκδόσεις του Firefox, οι επεκτάσεις δεν μπορούσαν να έχουν BOM, αλλά ο Firefox 1.5 και οι νεότερες εκδόσεις έχουν αρχίσει να υποστηρίζουν BOM. Τώρα ανακάλυψα ότι η PHP επίσης δεν υποστηρίζει BOM.
Η PHP σχεδιάστηκε χωρίς να ληφθεί υπόψη το BOM, πράγμα που σημαίνει ότι δεν αγνοεί τους τρεις χαρακτήρες του BOM στην αρχή του κωδικοποιημένου αρχείου UTF-8. Δεδομένου ότι πρέπει να είναι Όπως είδα στο wiki του Bo-Blog, το Bo-Blog, το οποίο χρησιμοποιεί επίσης PHP, προβληματίζεται επίσης από το BOM. Ένα άλλο πρόβλημα αναφέρεται: «Λόγω του περιορισμού του μηχανισμού αποστολής COOKIE, στα αρχεία που έχουν ήδη BOM στην αρχή αυτών των αρχείων, τα COOKIES δεν μπορούν να σταλούν (επειδή η PHP έχει ήδη στείλει την κεφαλίδα του αρχείου πριν από την αποστολή του COOKIE), επομένως οι λειτουργίες σύνδεσης και αποσύνδεσης δεν είναι έγκυρες. Όλες οι λειτουργίες που βασίζονται σε COOKIES και SESSION δεν είναι έγκυρες. Αυτός θα πρέπει να είναι ο λόγος για την κενή σελίδα στο φόντο του WordPress, επειδή οποιοδήποτε από τα εκτελεσμένα αρχεία περιέχει ένα BOM και και οι τρεις χαρακτήρες θα σταλούν, προκαλώντας την αποτυχία της λειτουργικότητας που εξαρτάται από τα cookies και τις περιόδους σύνδεσης.
Η λύση είναι να αποθηκεύσετε το αρχείο ως κώδικα ASCII εάν περιέχει μόνο αγγλικούς χαρακτήρες (ή χαρακτήρες σε κωδικοποίηση ASCII). Εάν χρησιμοποιείτε ένα πρόγραμμα επεξεργασίας όπως το UE, κάντε κλικ στην επιλογή File->Convert->UTF-8 σε ASCII ή επιλέξτε Κωδικοποίηση ASCII στην επιλογή Αποθήκευση ως. Εάν πρόκειται για γραμμή που τελειώνει σε μορφή DOS, μπορείτε να την ανοίξετε με το Σημειωματάριο, να κάνετε κλικ στην επιλογή Αποθήκευση ως και να επιλέξετε κωδικοποίηση ASCII. Εάν περιέχει κινεζικούς χαρακτήρες, μπορείτε να χρησιμοποιήσετε τη λειτουργία αποθήκευσης ως UE και να επιλέξετε "UTF-8 no BOM". Ανατρέξτε στην παρακάτω εικόνα:
Σύμφωνα με τις οδηγίες του wiki του Bo-Blog: Το Editplus πρέπει να αποθηκευτεί ως gb και στη συνέχεια ως UTF-8. Ωστόσο, να είστε προσεκτικοί όταν το κάνετε αυτό, όλοι οι χαρακτήρες που δεν περιλαμβάνονται στην κωδικοποίηση GBK θα χαθούν. Εάν υπάρχουν κάποιοι μη κινεζικοί χαρακτήρες στο αρχείο, μην χρησιμοποιήσετε αυτήν τη μέθοδο. (Από αυτή τη μικρή πτυχή, το UE - UltraEdite-32 είναι πράγματι πολύ καλύτερο από το Editplus, το Editplus είναι πολύ ελαφρύ)
Ένας άλλος τρόπος που βρήκα είναι να χρησιμοποιήσω το πρόγραμμα επεξεργασίας αρχείων που παρέχεται από το Wordpress. Αυτή η μέθοδος δεν είναι περιορισμένη και δεν χρειάζεται να κάνετε λήψη ειδικού προγράμματος επεξεργασίας, τελικά, όλοι χρησιμοποιούν το Wordpress. Αρχικά, ενεργοποιήστε την άδεια εγγραφής του αρχείου που θέλετε να επεξεργαστείτε στο ftp και, στη συνέχεια, εισαγάγετε το πρόγραμμα επεξεργασίας αρχείων φόντου WordPress - > > διαχείρισης, εισαγάγετε τη διαδρομή για να επεξεργαστείτε το αρχείο και κάντε κλικ στην επιλογή Επεξεργασία αρχείου. Δεν θα μπορείτε να δείτε τους τρεις πρώτους χαρακτήρες στην οθόνη επεξεργασίας που εμφανίζεται, αλλά δεν πειράζει, τοποθετήστε τον κέρσορα πριν από τον πρώτο χαρακτήρα ολόκληρου του αρχείου και πατήστε το πλήκτρο Backspace. Εντάξει, κάντε κλικ στην επιλογή Ενημέρωση αρχείου, ανανεώστε το σε ftp, μπορείτε να δείτε ότι το αρχείο είναι 3 byte μικρότερο και τελειώσατε.
Τέλος, αυτό είναι ένα μεγάλο πρόβλημα, όλοι όσοι θέλουν να γράψουν τα δικά τους πρόσθετα, να επεξεργαστούν τα πρόσθετα άλλων για δική τους χρήση και πρέπει να τροποποιήσουν το πρότυπο (αυτό εκτιμάται ότι χρειάζεται ο καθένας), είναι καλύτερο να κατανοήσουν τις παραπάνω γνώσεις, για να μην κατακλύζονται όταν υπάρχει πρόβλημα.
|