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

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

Δημοσ.

Καλησπέρα,

έχω ένα από τα συνηθισμένα (; ) προβλήματα με τη mysql και τους ελληνικούς χαρακτήρες. 

 

Κατ αρχην εχω ορισει τα character sets σε utf8,

syyW8wR.png

 

 

η δημιουργια της βασης ειχε γινει ως εξης:

CREATE DATABASE dbname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

η δημιουργια ενος table ειχε γινει ως εξης:

$query = "CREATE TABLE IF NOT EXISTS items(" .
            "id INT UNSIGNED NOT NULL," .
            "title VARCHAR(256) CHARACTER SET utf8 COLLATE utf8_general_ci," .
            "link  VARCHAR(256)," .
            "guid  VARCHAR(128)," .
            "description VARCHAR(4096) CHARACTER SET utf8 COLLATE utf8_general_ci," .
            "pubdate VARCHAR(64)," .
            "timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP," .
            ") Engine=MyISAM DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci";

$result = $db->query($query);

Εστω οτι διαβαζω απο ενα rss feed το item αυτο:

zh2CYwC.png

 

οταν κανω select στην βαση βλεπω αυτο:

yeobTh5.png

 

δηλαδη το πεδιο title εμφανιζεται μια χαρα με ελληνικους χαρακτηρες, ενω το πεδιο description φαινεται με κατι σε κλπ.

 

Επισης, κατα τη συνδεση με τη βαση εκανα και τα εξης, αν και δεν αλλαξε κατι,

$db = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

$db->query("SET CHARACTER SET UTF8");
$db->query("SET NAMES UTF8");
$db->set_charset('utf8');

Η ληψη των rss feeds γινεται με χρηση της SimplePie,

foreach ($feed->get_items() as $item)
{
    $title       = $db->real_escape_string($item->get_title());
    $link        = $item->get_link();
    $guid        = $item->get_id();
    $description = $db->real_escape_string($item->get_description());
    $pubdate     = $item->get_date();

    $query = "INSERT INTO items(id, title, link, guid, description, pubdate) VALUES" .
                            "('$feed_id', '$title', '$link'," .
                            " '$guid', '$description', '$pubdate')";
    $result = $db->query($query);

}
 

Το ερωτημα ειναι απλο. Τις πταιει; Πως γινεται το πεδιο title να εμφανιζεται μια χαρα με ελληνικους χαρακτηρες και to description ετσι περιεργα; 

Δημοσ.

Μήπως το description το επεξεργάζεται javascript πριν το insert ;


Νομίζω το "description VARCHAR(4096)" το μέγιστο varchar σε χαρακτήρες είναι 256 εσύ βάζεις 4096. Άλλαξε το σε text.

 
 

Δημοσ.

Εστω οτι διαβαζω απο ενα rss feed το item αυτο:

zh2CYwC.png

Αυτό είναι το αποτέλεσμα που βλέπεις στον browser, σωστά; Και είναι ήδη επεξεργασμένο για να εμφανιστεί έτσι.

 

Για να μπορέσουμε να ξέρουμε την πραγματική μορφή των περιεχομένων, πρέπει να το ανοίξεις σε ένα text editor και να κάνεις paste τον πραγματικό κώδικα.

Δημοσ.

Μήπως το description το επεξεργάζεται javascript πριν το insert ;

Νομίζω το "description VARCHAR(4096)" το μέγιστο varchar σε χαρακτήρες είναι 256 εσύ βάζεις 4096. Άλλαξε το σε text.

 

 

 

Δεν υπαρχει καθολου javascript, και τα πεδια title και description επεξεργαζονται με τον ιδιο ακριβως τροπο.

Απ ότι ειδα το varchar στην mysql εχει οριο 65536 bytes. Δοκιμασα παντως και με text αλλα δεν αλλαξε κατι..

 

Αυτό είναι το αποτέλεσμα που βλέπεις στον browser, σωστά; Και είναι ήδη επεξεργασμένο για να εμφανιστεί έτσι.

 

Για να μπορέσουμε να ξέρουμε την πραγματική μορφή των περιεχομένων, πρέπει να το ανοίξεις σε ένα text editor και να κάνεις paste τον πραγματικό κώδικα.

 

Σωστα. Το ανοιξα σε 2-3 editors και φαινοταν κανονικα. Στο Nodepad++ σαν encoding ειχε UTF-8 w/o BOM.

 

Εκανα δοκιμες και με rss feeds αλλων ελληνικων sites, πχ tovima.gr, gazzetta.gr, sport24.gr, newsit.gr, protothema.gr

Απο ολα αυτα μονο του sport24 μου εμφανιζε το description κανονικα με ελληνικα. Σε ολα τα αλλα εβλεπα τα περιεργα κσ κλπ...

 

 

//edit

Χμμ... σαν να καταφερα κατι...

 

Αν πανω στο description χρησιμοποιησω τη συναρτηση Link.png Site: html_entity_decode , τοτε το εμφανιζει σωστα. Yay!

 

Δεν μπορω να πω οτι καταλαβαινω γιατι φαινεται να δουλευει ετσι but I'll take it.

Δημοσ.

Στο html αρχείο σου ορίζεις το charset σε utf8 ;

 

  • HTML4
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  • HTML5
<meta charset="UTF-8">
Δημοσ.

 

Στο html αρχείο σου ορίζεις το charset σε utf8 ;

 

  • HTML4
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  • HTML5
<meta charset="UTF-8">

 

Θα το έκανα αν υπήρχε html αρχειο  :P (και το php αρχειο που υπαρχει δεν προοριζεται να κανει τιποτα output στον browser).

Προκειται απλα για ενα php script το οποιο τραβαει καποια αρχεια (rss feeds) απο το internet και αποθηκευει καποια πραγματα σε μια βαση. That's all.

Παντως για λογους debugging εκανα μερικα echo για να δω το αποτελεσμα στον browser και φαινοταν μια χαρα, ακομη και χωρις το 

<meta charset="UTF-8">. Απλα στη βαση αποθηκευοταν με περιεργο τροπο...

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

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

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

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

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

Σύνδεση

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

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