[SOLVED] Encoding μπλέξιμο?

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

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

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από dva_dev » 07 Δεκ 2011 09:55

Εχω τον παρακάτω πίνακα σε sql server 2005 σε windows 2003

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

CREATE TABLE [dbo].[tasks](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[title] [nvarchar](255) NOT NULL,
	[description] [ntext] NULL,
 CONSTRAINT [aaaaatasks_PK] PRIMARY KEY NONCLUSTERED ([id] ASC)
)
Εχω και τον παρακάτω κώδικα που τον τρέχω σε ubuntu (Apache/2.2.14 + PHP 5.3.2), και συνδέεται στον παραπάνω server για να διαβάσω τα δεδομένα.

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

<?php
 header&#40;'Content-type&#58; text/plain; charset=utf-8'&#41;;
 $conn = mssql_connect&#40;$server,$username,$password&#41;;
 if &#40;$conn&#41;
 &#123;
  mssql_select_db&#40;'tasks',$conn&#41;;
  $sql = 'select top 3 title from tasks;';
  $result=mssql_query&#40;$sql,$conn&#41;;
  while &#40;$row=mssql_fetch_object&#40;$result&#41;&#41;
  &#123;
        $title = trim&#40;$row->title&#41;;
        echo "$title\n";
  &#125;
  mssql_free_result&#40;$result&#41;;
 &#125;
 mssql_close&#40;$conn&#41;;
?>
Αν τρέξω τον κώδικα από το shell παίρνω τα εξής αποτελέσματα:
E-mails Τμήμα Κτηνιατρικής
Air Condition
E-mails Δ/νση Μεταφορών
Αν πάω να δω τον κώδικα από τον webserver παίρνω τα εξής αποτελέσματα:
E-mails ????? ????????????
Air Condition
E-mails ?/??? ?????????
Καμιά ιδέα γιατί μπορεί να γίνεται αυτό;
Τελευταία επεξεργασία από το μέλος dva_dev την 07 Δεκ 2011 16:47, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από cpulse » 07 Δεκ 2011 10:30

Αν εννοείς winblows shell μάλλον τρέχει σε windows-1253 ενώ η ιστοσελίδα σε utf-8.

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από dva_dev » 07 Δεκ 2011 11:03

Στο bash shell του ubuntu (μέσω putty σε utf-8 ).

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από korgr » 07 Δεκ 2011 11:32

Δοκίμασε μετά το connection να δώσεις SET NAMES ( utf8 )

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

<?php
 header&#40;'Content-type&#58; text/plain; charset=utf-8'&#41;;
 $conn = mssql_connect&#40;$server,$username,$password&#41;;
 if &#40;$conn&#41;
 &#123;
  mssql_select_db&#40;'tasks',$conn&#41;;
  mssql_query&#40;"SET NAMES 'utf8'",$conn&#41;;
  $sql = 'select top 3 title from tasks;';
  $result=mssql_query&#40;$sql,$conn&#41;;
  while &#40;$row=mssql_fetch_object&#40;$result&#41;&#41;
  &#123;
        $title = trim&#40;$row->title&#41;;
        echo "$title\n";
  &#125;
  mssql_free_result&#40;$result&#41;;
 &#125;
 mssql_close&#40;$conn&#41;;
?>

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από nbc » 07 Δεκ 2011 11:53

Aλλαξε το charset του header από UTF-8 σε UCS-2 (ή UTF-16).


@korgr: η "SET NAMES ..." αφορά μόνο τη MySQL

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από dva_dev » 07 Δεκ 2011 12:03

Ούτε η αλλαγή στο charset utf-8, ucs-2, utf-16, utf-16le, utf-16be έκανε κάτι.
:(

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από nbc » 07 Δεκ 2011 12:06

Εξαρτάται σε τι encoding είναι σωσμένα τα data σου. Πάντως σε UTF-8 το βλέπω χλωμό καθώς ο MSSQL 2005 δεν το υποστηρίζει (παρά μόνο σε XML).

Η διαφορά που βλέπεις μεταξύ shell και browser οφείλεται στο ότι η εντολή header() αφορά το http response, δεν έχει καμμιά εφαρμογή στο shell. Άρα, το shell τυπώνει ότι παίρνει ενώ ο browser μετασχηματίζει.

Επειδή το native encoding των Windows NT είναι UCS-2, γι αυτό και στο πρότεινα... Η επόμενή μου προσπάθεια θα ήταν το 1253 ή το ISO, καθώς μάλλον τα έχεις σώσει single-byte. Δεν βλέπω κάτι άλλο...

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από dva_dev » 07 Δεκ 2011 12:20

Sorry, δική μου παράλειψη. Το collation του server είναι Greek_CI_AS, και η στήλη χρησιμοποιεί το default collation του server.

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από nbc » 07 Δεκ 2011 12:30

Η στήλη χρησιμοποιεί UCS-2 (λόγω του προθέματος n), αυτό είναι το παράδοξο.

Αν ξέραμε πως μπήκαν τα data μέσα ίσως να βγάζαμε άκρη :D

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από dva_dev » 07 Δεκ 2011 12:44

Τα δεδομένα μπήκαν από access 2007 και καταχώρηση με το χεράκι (σε linked tables - μέχρι να φτιαχτεί UI να γίνεται η δουλειά).

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από nbc » 07 Δεκ 2011 13:25

Κάνε μια παλικαριά:

Εκεί που έχεις

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

echo "$title\n"; 
κάντο

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

echo sprintf&#40;'%s &#91;%s&#93; %d', $title, bin2hex&#40;$title&#41;, strlen&#40;$title&#41;&#41;; break;
και ανέβασέ το...


Edit:
----

Μπας και ο server 2003 είναι Αγγλικός (χωρίς Ελληνικά, εννοώ);

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από dva_dev » 07 Δεκ 2011 14:27

Βγάζει αυτό (χωρίς το break για να βγάλει και για τις 3 εγγραφές):

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

E-mails ????? ???????????? &#91;452d6d61696c73203f3f3f3f3f203f3f3f3f3f3f3f3f3f3f3f3f&#93; 26
Air Condition &#91;41697220436f6e646974696f6e&#93; 13
E-mails ?/??? ????????? &#91;452d6d61696c73203f2f3f3f3f203f3f3f3f3f3f3f3f3f&#93; 23

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από nbc » 07 Δεκ 2011 14:47

Και αυτό το πράγμα δείχνει σωστά στο shell??? :o

Είναι φανερό πως η PHP παίρνει ερωτηματικά (3F) από τη βάση και μάλιστα σε single-byte encoding. Δεν υπάρχει τρόπος να γίνουν τα ερωτηματικά ελληνικά.

Μήπως τρέχει διαφορετική PHP στο shell απότι στον Apache? Με άλλο ini ίσως?

Σηκώνω τα χέρια :D

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

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από dva_dev » 07 Δεκ 2011 15:27

Μόλις έκανες μια πάρα πάρα πάρα πολύ καλή ερώτηση!..
:o

Ετρεξα ένα # find / -name php*.ini
και μου έβγαλε
/usr/prog/eaccelerator-0.9.6.1/doc/phpdoc.ini
/var/www/html/wp/wp-content/plugins/pretty-link/includes/php/php_browsecap.ini
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini
/etc/php5/cgi/php.ini
:evil: :evil: :evil:

Θα αρχίσω σε λίγο να το ψάχνω. (Να φάμε και τίποτα).

Ευχαριστώ πολύ, και θα επανέλθω...

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

[SOLVED] Encoding μπλέξιμο?

Δημοσίευση από cpulse » 07 Δεκ 2011 16:23

nbc :respect:

Απάντηση

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

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

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