Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

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

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

Απάντηση
Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από ideal » 06 Ιουν 2013 01:16

Καλησπερα. Εχω ενα μονιμο προβλημα με την αποθηκευση κειμενου σε textareas. Μονιμως κατι παει στραβα...
Σε ενα textarea προσπαθω να αποθηκευσω ενα κειμενο. Το προβλημα ειναι οτι οταν αποθηκευω μου κοβει κειμενο. Το κειμενο κοβεται ακριβως μετα το πρωτο 'λ'. Δηλαδη αν αποθηκευσω 'Ενα αλεξιπτωτο βρεθηκε κρεμασμενο σε ενα δεντρο.' στη βαση θα αποθηκευτει σκετο 'Ενα α'. Μετα το 'λ' εχω προβλημα. Τι μπορει να φταιει; Εχει κανεις υποψιν του; Δεν ξερω αν ειναι θεμα PHP η MYSQL.
Δεν μπορούμε να λύσουμε τα προβλήματά μας χρησιμοποιώντας τον ίδιο τρόπο σκέψης που χρησιμοποιήσαμε όταν τα δημιουργήσαμε. -Α. Einstein

Rent a Car

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από Khronos » 06 Ιουν 2013 01:24

Τσέκαρε το length του πεδίου στη βάση.

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1947
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από Alice_Cooper » 06 Ιουν 2013 10:03

vasika den mporoume na voithisoume kai poly etc
steile code na doume ...
pes mas to CHARSET pou xrisimopoieis sthn db/tables

dokimase mia echo afou sxhmatisth to query na deis ti stelnei to script sthn db.
dose mia

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

show create table <onoma table>
gia to table pou prospatheis na steileis kai vale mas ti sou epistrefei

Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από ideal » 06 Ιουν 2013 16:40

Καλησπερα. Το length ειναι TEXT επομενως δε νομιζω να εχει προβλημα με το χωρο αποθηκευσης. Μεταφρασα το ιδιο κειμενο στα αγγλικα (1250 λεξεις - 3 σελιδες word) και το εβαλα και αποθηκευτηκε κανονικα... Οταν βαζω ενα οποιοδηποτε κειμενο μου το κοβει στο ελληνικο 'λ' και μετα. Ειναι πολυ παραδοξο γιατι δεν εχω βαλει εγω να κοβει κατι. Στην ουσια μονο κατι δικα μου φιλτρα για custom tags που εχω βαλει εχει και τιποτα αλλο.

Το charset ειναι utf8_unicode_ci.
Δεν μπορούμε να λύσουμε τα προβλήματά μας χρησιμοποιώντας τον ίδιο τρόπο σκέψης που χρησιμοποιήσαμε όταν τα δημιουργήσαμε. -Α. Einstein

Rent a Car

Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από ideal » 06 Ιουν 2013 16:51

Δυο μερες εχω σπασει το κεφαλι μου να ψαχνω...
Τωρα που μου ειπατε τα παραπανω ψαχνοντας θυμηθηκα οτι προσθεσα προσφατα το παρακατω:

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

str_replace&#40;'»', '&raquo;', $variable&#41;;
Για καποιο λογο το '»' το μπερδευει με το 'λ' και στη θεση του μου εβγαζε ερωτηματικο μεσα στο ρομβο...
Που οφειλεται τωρα αυτο; Και γιατι απλως δεν αντικαθιστα τα συμβολα μεταξυ τους αλλα μου κοβει το κειμενο;
Δεν μπορούμε να λύσουμε τα προβλήματά μας χρησιμοποιώντας τον ίδιο τρόπο σκέψης που χρησιμοποιήσαμε όταν τα δημιουργήσαμε. -Α. Einstein

Rent a Car

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1947
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από Alice_Cooper » 06 Ιουν 2013 18:54

to query eides pos dimiourgite???
vale mia

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

echo $variable;
akrivos kato apo tin

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

str_replace&#40;'»', '&raquo;', $variable&#41;;
kai mia echo ... kato akrivos apo ton sxhmatismo tis query kai vale tin na thn typonei ... na doume ti paei na steilei.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από nbc » 06 Ιουν 2013 20:31

ideal έγραψε:Δυο μερες εχω σπασει το κεφαλι μου να ψαχνω...
Τωρα που μου ειπατε τα παραπανω ψαχνοντας θυμηθηκα οτι προσθεσα προσφατα το παρακατω:

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

str_replace&#40;'»', '&raquo;', $variable&#41;;
Για καποιο λογο το '»' το μπερδευει με το 'λ' και στη θεση του μου εβγαζε ερωτηματικο μεσα στο ρομβο...
Που οφειλεται τωρα αυτο; Και γιατι απλως δεν αντικαθιστα τα συμβολα μεταξυ τους αλλα μου κοβει το κειμενο;
Το λ είναι U+03BB, το » U+00BB (0xΒΒ), το str_replace είναι binary (δεν καταλαβαίνει από encodings). Συνεπώς, στο κείμενο που αποθηκεύεις, αντικαθιστάς το 2ο byte του λ με & raquo ;, ουσιαστικά καταστρέφοντας το UTF-8 encoding.

Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από ideal » 06 Ιουν 2013 21:11

Alice_Cooper έγραψε: to query eides pos dimiourgite???
vale mia

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

echo $variable;
akrivos kato apo tin

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

str_replace&#40;'»', '&raquo;', $variable&#41;;
kai mia echo ... kato akrivos apo ton sxhmatismo tis query kai vale tin na thn typonei ... na doume ti paei na steilei.
Σαν $variable βγαζει το κειμενο κανονικα και στη δευτερη περιπτωση με τα εισαγωγικα κοβει το κειμενο.
nbc έγραψε: Το λ είναι U+03BB, το » U+00BB (0xΒΒ), το str_replace είναι binary (δεν καταλαβαίνει από encodings). Συνεπώς, στο κείμενο που αποθηκεύεις, αντικαθιστάς το 2ο byte του λ με & raquo ;, ουσιαστικά καταστρέφοντας το UTF-8 encoding.
Καταλαβα οτι κατι κανω ανορθοδοξα αλλα για καντο λιανα :D
Απο οσο ειδα τα encodings ειναι οι διαφορες μορφες που μπορει να εχει ενας χαρακτηρας και το binary ειναι μια τετοια μορφη (δυαδικη) σωστα; Τι δεν καταλαβαινω;
Βασικα στα μάτια μου είναι χαρακτηρας το ενα χαρακτηρας και το αλλο για αυτο δεν καταλαβαινω πως αυτά τα 2 δεν κολλάνε.

Μηπως εννοεις οτι το ενα ειναι binary και το αλλο utf8 διαφορετικα encodings;
Δεν μπορούμε να λύσουμε τα προβλήματά μας χρησιμοποιώντας τον ίδιο τρόπο σκέψης που χρησιμοποιήσαμε όταν τα δημιουργήσαμε. -Α. Einstein

Rent a Car

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από dva_dev » 06 Ιουν 2013 23:57

Δες αυτό
https://gist.github.com/sgmurphy/3098836

και δοκίμασε να αντικαταστήσεις το str_replace με mb_str_replace.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από nbc » 07 Ιουν 2013 09:38

ideal έγραψε:...αλλα για καντο λιανα...
Ας υποθέσουμε πως το κείμενο σου είναι:

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

Ένα «αλεξίπτωτο»
Αυτό, αν σωθεί ως ANSI (single-byte encoding), θα γίνει:

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

0000&#58; B8 ED E1 20 AB E1 EB E5 EE DF F0 F4 F9 F4 EF BB

λ -> EB
» -> ΒΒ
Αν όμως σωθεί ως UTF-8 (multi-byte encoding), θα γίνει:

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

0000&#58; CE 88 CE BD CE B1 20 C2 AB CE B1 CE BB CE B5 CE
0010&#58; BE CE AF CF 80 CF 84 CF 89 CF 84 CE BF C2 BB

λ -> CE BB
» -> C2 BB
Ο κώδικας

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

str_replace&#40;'»', '&raquo;', $variable&#41;;
Αν σωθεί ως ANSI, θα αντικαταστήσει τα "BB" με "26 72 61 71 75 6F 3B". Στο UTF-8 hex-dump που παρέθεσα, το BB δεν είναι αυτόνομο byte, αλλά τμήμα ακολουθίας. Μετά την αντικατάσταση, η ακολουθία καταστρέφεται. Το αποτέλεσμα παύει να είναι valid UTF-8 string, με απροσδιόριστο αποτέλεσμα. Σε εσένα έσκασε το λ, σε άλλη περίπτωση θα σκάσει κάτι διαφορετικό.

Συνεπώς, θα πρέπει να πεις στο str_replace, να αντικαταστήσει την ακολουθία "C2 BB" και όχι σκέτο το BB. Αυτό μπορεί να γίνει είτε σώνοντας τον κώδικα σε UTF-8 (οπότε ο editor θα μετατρέψει το » σε C2 BB), είτε βάζοντας την ακολουθία στο input.

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

str_replace&#40;"\xC2\xBB", '&raquo;', $variable&#41;;
Δεν μπορώ να στο κάνω πιο λιανά.... :D

Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

Παραδοξο...κοβει το 'λ' κατα την αποθηκευση

Δημοσίευση από ideal » 07 Ιουν 2013 10:45

nbc έγραψε: Δεν μπορώ να στο κάνω πιο λιανά.... :D
Τωρα μαλιστα! Εισαι ωραιος!! :clap: :clap: :clap:
Που θα μπορουσα να ξεκινησω να μαθαινω κι εγω τετοια βασικα πραγματακια γιατι ουτε καν τα ειχα στα υποψιν μου;
Δεν μπορούμε να λύσουμε τα προβλήματά μας χρησιμοποιώντας τον ίδιο τρόπο σκέψης που χρησιμοποιήσαμε όταν τα δημιουργήσαμε. -Α. Einstein

Rent a Car

Απάντηση

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

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

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