PHP + MSSQL vs UTF-8

 ( f0xhu | 2008. április 27., vasárnap - 22:33 )

Sziasztok!

Kis form-feldolgozó projekt fejlesztését kellene elvégeznem egy Win+MSSQL rendszerre PHP-ben.

Namost, a kódot utf-8 kódolással írom (notepad2), minden (x)html kód, amit az apache visszaküld szintén utf-8 kódolású.
Egyetlen problémám, hogy a mssql2k5-ben tárolt adatok lekérdezésekor az ékezetes betűk helyén ?-ek jelennek meg. Böngészőben a kódolást állítva ISO-8859-1-re az adatbázisból nyert adat jól jelenik meg, viszont az összes többi szöveg olvashatatlan lesz. -> Ezek szerint kódolás. Néztem msdn-t, azt írja, hogy VARCHAR() típusú mezők helyett használjak NVARCHAR()-t, mert az támogatja a unicode-ot jól. Ok. Megcsináltam így a táblámat, próba -> ugyanaz.

Szóval miután 1.5 napig vesződtem, hogy összeházasítsam a MSSQL-t az Apache-csal, valaki tudna segíteni, hogy mivel érdemes próbálkozni hogy mondjuk egy S<m>ELECT NAME FROM USERS WHERE UID = akármi utasításban visszakapott ékezeteket tartalmazó nevet normálisan meg tudjak jeleníteni?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

amit az adatbázisból visszakapsz (ill. odaadsz(!)), azt át kell kódolni a megfelelő kódolásra.
VAGY minden szöveget átkonvertálsz az adatbázison belül UTF-8-ra ISO-8859-1-ről.

php-bol a mysql_select_db utan:
mysql_query('SET NAMES utf8');

pch

Sziasztok!

Köszönöm a gyors segítséget! Sajnos pch javaslata nem működik, ugyanúgy iso8859-1-ben kapom vissza a sztringet. Most kipróbáltam, hogy egy
$row = mssql_fetch_array($result);
hívás után az utf8_encode() függvényt meghívom adott mezőn és kiíratom: echo "Név: " . utf8_encode($row['NAME']);. Így most jó. Holnap még kísérletezek vele, hogy tényleg jó-e!

Hogyha viszont így jó, akkor is szükséges egy insert előtt utf8_decode-dal konvertáltatni a bemenetet vagy encode megoldja majd nekem a konverziót?

--
A gyors gondolat többet ér, mint a gyors mozdulat.

Nem MySQL-ről, hanem Mircosoft SQL serverről van szó.

ha freetds-t hasznalsz, az /etc/freetds/freetds.conf-ban allitsd be a szerver beallitasai kozott:
[szerver]
host = xxx
port = yyy
client charset = ISO-8859-2 -t vagy a megfelelot

illetve a /etc/php5/apache2/php.ini-ben:
; Specify client character set.
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
mssql.charset = "ISO-8859-2"

Szia!

Köszönöm! Bár nem tudom, hogy a T. Ügyfél mit engedélyez majd, így a lehető legkevesebb "külső" megoldást kell használnom... :(

--
A gyors gondolat többet ér, mint a gyors mozdulat.