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

ελληνικά από mssql μέσω php


kwstas_pap

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

Καλημέρα...

 

Ο server μου είναι σε linux και hostάρει κανονικά php/mysql sites όπως κλασικά τόσοι άλλοι.

Μου ζητήθηκε να κάνω connection με άλλο server που τρέχει sql2005 για να αντλώ κάποιες πληροφορίες με ελληνικό περιεχόμενο..

 

και εδώ αρχίζει το πανηγύρι!

κάνω connection με την mssql_connect .. όλα καλά από την άποψη ότι συνδέεται και φέρνει data..

ΟΜΩΣ η απεικόνιση των ελληνικών γίνεται με "?????".

έκανα ένα σωρό πειράματα.. το μόνο που κατάφερα είναι τυχαία με την

$x = iconv("UCS-2", "UTF-8", $x);

να μην εμφανίζονται "????" αλλά κάτι μάλλον unicode χαρακτήρες (δείτε συνημένο)..

 

Πιστεύω ότι έχω δοκιμάσει τα πάντα (το script μου το δοκίμασα με utf-8, windows-1253, unicode...) το iconv παρομοίως...

 

έχει κανείς κάνει κάτι παρόμοιο , συνάντησε το ίδιο πρόβλημα και το ξεπέρασε;

 

Μίλησα με τον admin της mssql και μου είπε ότι η mssql δεν έχει utf8 (αλήθεια;) και είναι όλα (μάλλον!) σε windows-1253 (αμ έλα που δεν το βλέπω!).

 

ευχαριστώ.

post-84544-0-61975300-1300014744_thumb.gif

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για δοκιμασε την συναρτηση mb_detect_encoding . Αυτη η συναρτηση σου επιστρεφει το encoding που εχει ενα string. Ισως σε βοηθησει με το iconv. Περισσοτερα για την συνταξη της δες στο παρακατω link.

 

http://php.net/manual/en/function.mb-detect-encoding.php

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

μου επιστρέφει ότι είναι ASCII...

το δοκίμασα και αυτό (με iconv από ascii να γίνει utf8)..τζίφος..

 

μου μπήκαν ιδέες ότι ίσως χρειαστεί να παίξω με την setlocale..

έκανα πειράματα αλλά πάλι τίποτα δεν άλλαξε..

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για δες μπας και βοηθησει ... Το ξερω οτι ειναι λιγο ασχετο με το προβλημα σου αλλα εχει μια καπως ... λογικη. Δεν χανεις και τιποτα αφου τα εχεις δοκιμασει ολα.

 

http://forums.devshed.com/php-development-5/php-and-mysql-problem-with-greek-characters-261272.html

 

PS: http://www.experts-exchange.com/Database/MySQL/Q_23008060.html εδω ο τυπος ειχε ακριβως το ιδιο με εσενα προβλημα. (γιατι η πληροφορια θα πρεπει να κοστολογειται?)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

τίποτα.. ακριβώς τα ίδια αποτελέσματα (και καρατσεκάρω μπας και δεν ανεβάζω σωστά αρχεία κάθε φορά..)..φρίκη..

 

φέρνει πάντα αλλοιωμένο το αποτέλεσμα.. και υποπτεύομαι ότι απλούστατα έτσι μου το σερβίρει η mssql_connect..

και η εντολή αυτή δεν δέχεται παράμετρο του τύπο "set character greek" κτλ όπως η mysql_connect..

 

πρέπει να βρω κάποιον που να έχει κάνει το ίδιο.. (20 μέρες το ψάχνω!.. έχει πάει όλη η ζωή μου πίσω..Lol)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ο MSSql Server υποστηρίζει utf8. Θα πρέπει να δεις ποιο είναι το collation της ΒΔ σου. Το collation μπορεί να οριστεί σε επίπεδο server, database ή ακόμα και column.

 

Τα πεδία που έχουν τα ελληνικά τι τύπου είναι;

 

Δες σε αυτό το άρθρο http://bytes.com/topic/sql-server/answers/142972-characters-encoding κάποιες σχετικές πληροφορίες, ίσως σε βοηθήσουν. Αναφέρει και ένα command που μπορείς να τρέξεις για να δεις ποιο collation έχουν οι στήλες που σε ενδιαφέρουν. Μπορεί έτσι να καταφέρεις να κάνεις convert σε utf8, ή στο encoding που θέλεις.

 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ο MSSql Server υποστηρίζει utf8. Θα πρέπει να δεις ποιο είναι το collation της ΒΔ σου. Το collation μπορεί να οριστεί σε επίπεδο server, database ή ακόμα και column.

 

Τα πεδία που έχουν τα ελληνικά τι τύπου είναι;

 

Δες σε αυτό το άρθρο http://bytes.com/topic/sql-server/answers/142972-characters-encoding κάποιες σχετικές πληροφορίες, ίσως σε βοηθήσουν. Αναφέρει και ένα command που μπορείς να τρέξεις για να δεις ποιο collation έχουν οι στήλες που σε ενδιαφέρουν. Μπορεί έτσι να καταφέρεις να κάνεις convert σε utf8, ή στο encoding που θέλεις.

 

ρώτησα και έμαθα..

ο server έχει collation "SQL_Latin1_General_CP1253_CI_AI"

και η βάση "Greek_CI_AI"

 

χμμμ.. και πώς τα "μεταφράζω" τώρα αυτά για την iconv;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ρώτησα και έμαθα..

ο server έχει collation "SQL_Latin1_General_CP1253_CI_AI"

και η βάση "Greek_CI_AI"

 

χμμμ.. και πώς τα "μεταφράζω" τώρα αυτά για την iconv;

 

Έστεισα τον MSSQLEXPRESS 2008 server μου με collation SQL_Latin1_General_CP1253_CI_AI (έτσι λέει τουλάχιστον)

Έφτιαξα μια βάση, έναν πίνακα και 3 εγγραφές με collation Greek_CI_AI και Ελληνικούς χαρακτήρες.

 

Σε ένα linux mint7 με εγκατεστημένο (χύμα) ένα Xampp(lampp) 1.7.3a και ένα PHP script που βρήκα για το mssql_connect έκανα επιτυχώς μια σύνδεση με την βάση που έφτιαξα.

 

Και πάνω που ήμουν έτοιμος να δώ επιτέλους το πρόβλημα.... μου εμφάνισε τα πάντα κανονικά !!

Κανένα πρόβλημα.

 

Κρίμα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ίσως το πρόβλημα να υπάρχει μέχρι την έκδοση mssql2005.. τι να πω;

 

τώρα σκέφτομαι μήπως κάνω καμιά πατέντα και κατά το select να έχω μέσα στο query και ένα CONVERT των δεδομένων.

 

ΜΙΑ ΛΕΠΤΟΜΕΡΕΙΑ ΑΚΟΜΑ ΠΟΥ ΜΠΟΡΕΙ ΝΑ ΕΙΝΑΙ ΣΗΜΑΝΤΙΚΗ:

το πεδίο με το κείμενο που σου δουλεύει είναι Text Ή nText;

 

Σε κάποια από τα πολλά site που έψαξα κάποιοι λένε ότι πρέπει οπωσδήποτε το πεδίο να είναι nText ή nChar και όχι απλώς Text..

Το πεδίο που "τραβάω" είναι Text :-(

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το προηγούμενο table ήταν : numeric(18,0), varchar(50), varchar(50)

 

Τώρα το ξαναέφτιαξα ώς: numeric(18,0), nchar(10), nvarchar(50), ntext, text, varchar(50), char(10), nchar(10)

 

Λόγω του πεδίου με τύπο ntext χτυπάει τα παρακάτω λάθη:

 

>

Warning: mssql_query() [function.mssql-query]: message: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16) in /opt/lampp/htdocs/test/test.php on line 31
Warning: mssql_query() [function.mssql-query]: Query failed in /opt/lampp/htdocs/test/test.php on line 31
Warning: mssql_num_rows() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/test/test.php on line 33

 

Αν δεν το ζητήσω αυτό το πεδίο στο query, τα άλλα τα φέρνει κανονικότατα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ΜΙΑ ΛΕΠΤΟΜΕΡΕΙΑ ΑΚΟΜΑ ΠΟΥ ΜΠΟΡΕΙ ΝΑ ΕΙΝΑΙ ΣΗΜΑΝΤΙΚΗ:

το πεδίο με το κείμενο που σου δουλεύει είναι Text Ή nText;

Τα next και nvarchar πεδία είναι για να αποθηκεύεις σε unicode. Δεν έχεις θέμα λοιπόν με τον τύπο του πεδίου. Φαντάζομαι πως τα data έρχονται σε windows-1253. Δοκίμασε λοιπόν το εξής (εφόσον το script σου είναι σε utf-8):

 

>
<?php
echo iconv("Windows-1253", "UTF-8", $data_from_db);
?>

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

τουλάχιστον ξεκαθαρίστηκε ότι δεν έχει σχέση με text, nText κτλ..

 

(δοκίμασα και με cast και δεν άλλαξε κάτι (βασικά άλλαξε αλλά όχι προς το καλύτερο (τύπωσε κενό))..

 

anyway, τα πήρα "κρανίο" και άρχισα να δοκιμάζω ότι να'ναι..

πάλι δεν δούλεψε με όλους τους παρακάτω τρόπους:

 

echo iconv("Windows-1253", "UTF-8", $x);

echo iconv( "UTF-8","Windows-1253", $x);

echo iconv( "UTF-8","iso-8859-7", $x);

echo iconv( "iso-8859-7","UTF-8", $x);

 

με εναλλάξ charset=utf8 / windows-1253

 

βασικά νομίζω ότι o,τι και να κάνω το λάθος έρχεται από το select.. νομίζω ότι εκεί μέσα πρέπει κάτι να βάλω!

πχ

SELECT CAST(Descr AS nText(8000)) FROM dbtable..

 

βέβαια ΟΥΤΕ αυτό δούλεψε αλλά λέω (είμαι άσχετος από mssql) ότι μάλλον το πρόβλημα αρχίζει στο servίρισμα..!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν ξέρω κατά πόσο το CAST είναι σωστή προσέγγιση. Στον κώδικα σου θα πρέπει να το λύσεις με κάποιο τρόπο. Δοκίμασε ένα απλό script που να είναι αποθηκευμένο windows-1253 και δες αν στα τυπώνει σωστά. Αν δεν τα τυπώνει σωστά, τότε ίσως τα data δεν είναι σε αυτό το encoding.

 

Από την άλλη, υπάρχει και η εξής επιλογή που μπορείς να κάνεις στο SELECT σου, να ορίσεις δλδ το collation εκεί, π.χ.:

 

>
SELECT Place FROM Locations
ORDER BY Place
COLLATE Traditional_Spanish_ci_ai ASC;

Αυτό το βρήκα στο http://msdn.microsof.../ms184391.aspx. Κάνε κ καμιά δοκιμή έτσι, μήπως κ πιάσει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

το είχα δοκιμάσει και αυτό.. και μάλιστα τότε εβαζα μια σειρά από διαφορετικά collation μπας και το "ψάρευα"..

 

το ξαναδοκίμασα ..τζίφος..

 

το μόνο που άλλαξε ήταν να έχω τα data με "???" και με "Ώβ€ΏγΌΏβ€ΏγΌ"!

 

σαν μοτίβο τα παραπάνω μοιάζουν να επαναλαμβάνεται ο ίδιος χαρακτήρας.. αν δηλαδή τα "Ώβ€ΏγΌΏβ€ΏγΌ" ήταν πιο..random τότε θα πίστευα ότι "αντλώ" σωστή πληροφορία.. αλλά αφού επαναλαμβάνεται το ίδιο νομίζω ότι απλώς βλέπω τα "????" σε άλλο encoding!

 

 

ας το θέσω όμως αλλιώς:

Δεν υπάρχει κανείς να χρειάστηκε να υλοποιήσει σύνδεση linux php script προς microsoft mssql ; (μόνο εγώ θέλω να το κάνω αυτό; - μήπως να το βάλω αγγελία;!)

 

Ευχαριστώ, πάντως, για όλα παιδιά.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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