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

Περίεργο σε php $str[2]=="α"


jms

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

Δημοσ.

Παιδειά καλημέρα είναι λογικό αυτός ο έλεγχος να μην έχει σωστά αποτελέσματα ενώ έχω θέσει παντου τα collations σε utf?

Δημοσ.

χμ επειδή λειτουργεί καλά με τους στάνταρ χαρακτήρες μήπως απλά πρέπει να του δώσω το unicode κωδικό του χαρακτήρα??

Δημοσ.

Έχω ν ασχοληθώ κάτι μήνες και δεν είμαι σίγουρος αλλά αν δε βγάλεις άκρη με τα ελληνικά δες μήπως σε βοηθάει η συνάρτηση που υπάρχει στο πρώτο post εδώ.

Δημοσ.

παιδειά είχε κολήσει το μυαλό μου αυτό που ήθελα να κάνω γίνετε str_replace πάντως είμαι με την απορία γιατί ακόμα δεν κατάφερε να δουλέψει το προηγούμενο.

Δημοσ.

opos eipe kai o alex2005..

 

otan xrisimopeieis to == gia na sigkrineis string, dimiourgei provlimata, eidika otan to ena apo dio meli tis sigkriseis einai arithmos... px. to 'jms' == 0 epistrefei true (mallon epeidi to 'jms' se noumero einai 0)

 

na xrisimopoieis === gia sigkrisi strings, i kapoia sinartisi tipou strcmp

Δημοσ.

Το πρόβλημα του JMS έχει να κάνει με τη λειτουργία του string slicing. To $str[2] επιστρέφει το τρίτο byte και όχι τον τρίτο χαρακτήρα! Σε ένα utf-8 string οι ελληνικοί χαρακτήρες καταλαμβάνουν 2 bytes έκαστος. Εξ ου και η αποτυχία της συνθήκης.

 

Η λύση σε αυτές τις περιπτώσεις είναι το extension mbstring, ή η χρήση του iconv ή ενός πακέτου σαν το phputf8. Σε κάθε περίπτωση, το string slicing απαγορεύεται δια ροπάλου. Συνιστώ να αποφεύγεται η χρήση της γενικώς, καθώς σε εκτεταμένες μετρήσεις (profiling) που έχω κάνει έχει βρεθεί να είναι τουλάχιστον 20 φορές πιο αργή από εναλλακτικούς τρόπους επίλυσης του ίδιου προβλήματος (πχ strpos).

 

Η mbstring δεν είναι πάντοτε εκγατεστημένη, και αν είναι δεν έχει σεταριστεί να κάνει overloading μερικές βασικές συναρτήσεις χειρισμού strings. Η str_replace που ανέφερε ο JMS δεν ανήκει σε αυτές, πλην όμως, είναι ασφαλής από τη στιγμή που τα ορίσματα είναι utf-8. Και αυτό γιατί σε μια utf-8 κωδικοποίηση όλοι οι χαρακτήρες είναι μοναδικοί.

 

Περισσότερες πληροφορίες...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...