Jump to content
GSForum - Segélyvonal

Karakterkódolások


Sanzi

Recommended Posts

Kovács Gyula (MiniDisk)

Nekem jól működik. A példa fentebb. Az UTF8 meg kizárólag az angolban jó.

Link to comment
Share on other sites

h.arpad

Addig nincs is gond, amíg a helyén marad a MySQL-tábla... A gondok akkor jönnek, ha költöztetni kell, és gondolkodsz azon, miért is ne lenne jó a másik charset. :P

Link to comment
Share on other sites

payskin

A fõ baj nem a tábla költöztetésével van, hanem hogy a MySQL-t nem lehet egyértelmûen vagy erre, vagy arra beállítani. Illetve de lehet: egyértelmûen utf-8-ra lehet. Kár hogy ebben az esetben valahogy mégis hullámos lesz az õ, mire átjön a szöveg a PHP-n az oldalba. Érdekes, hogy phpMyAdminban jók az ékezetek, tehát... gõzöm nincs, mi történik. Nézegettem a PMA forrását, egy k szót nem értek belõle.

 

Ha az alapértelmezett karakterkészletet latin2-re tolom, akkor az lesz, amit fentebb láttok: a SESSION változók egy része utf-8-on marad, isten tudja, miért. Na, ezt lehet átállítani, ha mindenféle hülye SET parancsokat küldözgetek a MYSQL-nek.

 

Pont azt az állapotot szeretném elérni, hogy a MYSQL-ben (valahogy) beállítom a latin2-t, minden latin2 lesz, a HTML forrásban beállítom az iso-8859-2-t, és mûködik anélkül, hogy bármi mást kéne tennem. Álmodj királylány.

Link to comment
Share on other sites

Kovács Gyula (MiniDisk)

De Balázs: NEKEM ÍGY VAN, és működik! Nem igazán értem, hogy hogy nem lehet átállítani latin2-re a táblát ... :pislog: Biztos hogy jó az sql motorral minden? Jól működik, meg ilyesmi?

 

Esetleg megnézzem a tárhelyszolgáltatóm pontos adatait? (SQL motor, php verzió, stb.)

Link to comment
Share on other sites

arpsoft

@Balázs:

Nézd meg a forrásban, hogy a Phpmyadmin oldala milyen kódolással jön!

Link to comment
Share on other sites

payskin

UTF-8-cal. De az enyém is. Nála jók az ékezetek, nálam nem.

 

@MD: nem hiszem, hogy engedi megnézni a beállításokat, de ha mégis, akkor sem érünk vele semmit. Valószínûleg valamilyen Linuxon futtat MySQL-t, nagyjából semmi köze nincs a windowsos változathoz, amit én futtatok. Legalábbis az IDG szervereken levõ MySQL teljesen másképp viselkedik, más környezeti változókat mutat, a phpMyAdmin tízszer annyi kódolást kínál fel, pedig csont ugyanazt a verziót futtatom, eh...

Link to comment
Share on other sites

  • 1 month later...
payskin

Eltelt másfél hónap.

 

Ma felraktam a noteszgépemre a PHP-MySQL duót, beállítottam a MySQL-t latin2-re, lementettem a PCW cikkadatbázist egy szép 10 megabájtos szövegfájlba, bedumpoltam a MySQL-be (nem adtam meg semmilyen kódolást, magától minden mezõt latin2-re vett), és már megint nem tudom kiolvasni az õ és û betûket latin2-ként, kérdõjelek jönnek. PHPMyAdminban minden tökéletes.

 

Hát komolyan mondom, ezen megzavarodok. :nem:

 

HÁT TÉRDRE BORULOK, MEGOLDÓDOTT!!! Nem hiszem el! :olé:

 

Szétolvastam a fél világot, beleértve a weblabor több tudományos értekezését és fórumtémáját is, és mindig azon dühöngtem, hogy szófosás az van, de gyakorlati tanács az nincs. Erre itt a megoldás, egy eldugott kis témában, ahol csak néhány hozzászólás van, de ott van köztük a lényeg. Eh, ezt is megértük!

Link to comment
Share on other sites

Sanzi

@Balázs

Ma már nem fogok neki, de holnap megnézem. Ha nekem is működik, eszméletlen hálás leszek. :istenvagy: Következő Fórumtalin minimum egy meghívás valamire. ;):kocc:

Link to comment
Share on other sites

h.arpad

Tulajdonképpen nincs sok, amit olvasnod kéne. :)

@Spányik Balázs: A Google keresõbe beírod: "ékezetes karakter helyett kérdõjel" és lám... :lol:

 

Ha a szerverre phpMyAdminon keresztül, otthonról (localhostról) kimentett .sql fájlt töltesz fel (és otthon localhoston nem adtad meg a karakterkiosztás fajtáját, mert még régi a MySQL-ed otthon, és nincs ilyen opció), akkor a feltöltés elõtt fontos, hogy a szerveren lévõ phpMyAdminban beállí­tsd a fájl karakterkészletét latin2-re. Ha ezt nem teszed meg, az ékezetes karakterek helyett kérdõjel és más jelek jelennek meg.

mysql_query("SET NAMES latin2");

Link to comment
Share on other sites

payskin

Nos, egyrészt nem ezt írtam be a Google-ba. Másrészt nem ez vol a hibajelenség. A PHPMyAdminban mindig jók voltak az ékezetek, akármit állítottam be (utf-8, latin2). Kizárólag a saját lekérdezésem nem stimmelt.

 

Egyébként a mai napig nem értem, miért van szükség erre a SET NAMES-re, és miért nem elég, hogy én azt mondom a MySQL-nek, hogy latin2 az alapértelmezett kódolás. Az a bajom továbbra is, hogy nem tudom, ki a hülye. A MySQL, mint szerver, adja vissza rosszul vagy a PHP kliense kérdezi le rosszul? Na mindegy, a lényeg, hogy megoldódott.

Link to comment
Share on other sites

  • 1 month later...
Greene

Azért elég lol, hogy végigkerestél ezer fórumot és a dev.mysql.com-on ott van tisztán érthetõen a megoldás. Csak persze nem ültette át senki magyarba. Én balga meg nem olvastam a topicot, mondván, és úgysem használok ékezetet. :upsz:

Link to comment
Share on other sites

payskin

Ott van? Elég sokat nézegettem a MySQL doksiját, kevés eredménnyel. :upsz:

Link to comment
Share on other sites

  • 1 month later...
Sanzi

Nah, jó mérgelõdjünk, mérgelõdjünk.

 

@h.arpad

...a szerveren lévõ phpMyAdminban beállí­tsd a fájl karakterkészletét latin2-re. ...

Hol?

mysql_query("SET NAMES latin2");

Parancs kiadása után az alábbi hibaüzenetet kapom:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql_query("SET NAMES latin2")' at line 1 

 

@Greene

Tudom, Te nem használsz ékezetet, és azt is tudom, hogy az általad linkelt oldalon minden világosan le van írva. Én balga viszont nem találom, és az angolom se olyan jó. Kérlek, légy oly kedves és segíts, vagy legalább fordítsd le a "tisztán, és érthetõen" részt. Nagyon kíváncsi lennék rá. Köszönöm!

Link to comment
Share on other sites

payskin

Nem az a gond, ezt a MySQL-lel próbálod megetetni, miközben ez egy PHP utasítás? A MySQL-re csak a SET NAMES latin2 tartozik.

Link to comment
Share on other sites

Greene

Nem, a MySQL nem így jelzi a hibát.

 

PHP-ban ezt az utasítást a mysql-hez csatlakozás után kell kiadni.

Link to comment
Share on other sites

payskin

IPB kép

 

phpMyAdmin! ;):P

Link to comment
Share on other sites

  • 6 months later...
b1rd

hmmm... érdekes jelenségek! :pislog:

Link to comment
Share on other sites

  • 1 month later...
saya-jin

Hi allz!

 

Bár már régen működik ez a fórum, ahogy elnézem, de gondoltam, hátha tudok valamit én is hozzátenni a témához. Én végignéztem a netet szintén a témában, és én is téptem a hajamat, sőt még van amiért most is hullanak rendesen a hajszálaim. Amit találtam használható dolgot, az a következő:

1. A legbiztosabb, ha minden kritikus stringet CHARACTER SET utf8 típusnak definiálsz. Ezt elméletileg be lehet állítani defaultra valahol, de nekem nem sikerült végleg megoldanom, hogy ne kelljen ezt odabiggyeszteni.

2. Amikor php-ban létrehozott a kapcsolatot, akkor ilyet kellene még utána küldeni:

  $db = new mysqli($g_DBConnection_ServerName,
                     $g_DBConnection_UserName,
                     $g_DBConnection_Password,
                     $g_DBConnection_DB);
                     
    if (mysqli_connect_errno())
        call_error(-1);
        
    $db->query("SET NAMES UTF8");
    $db->query("SET CHARACTER_SET UTF8");

 

3. Most jön a java! A "php.ini" fileban megkeresed a "[mbstring]" taget és ilyesmi formába kell önteni:

; language for internal character representation.

mbstring.language = Neutral

 

; internal/script encoding.

; Some encoding cannot work as internal encoding.

; (e.g. SJIS, BIG5, ISO-2022-*)

mbstring.internal_encoding = UTF-8

 

; http input encoding.

mbstring.http_input = auto

 

; http output encoding. mb_output_handler must be

; registered as output buffer to function

mbstring.http_output = UTF-8

 

; enable automatic encoding translation accoding to

; mbstring.internal_encoding setting. Input chars are

; converted to internal encoding by setting this to On.

; Note: Do _not_ use automatic encoding translation for

; portable libs/applications.

mbstring.encoding_translation = On

 

; automatic encoding detection order.

; auto means

mbstring.detect_order = auto

 

; substitute_character used when character cannot be converted

; one from another

mbstring.substitute_character = none;

 

; overload(replace) single byte functions by mbstring functions.

; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),

; etc. Possible values are 0,1,2,4 or combination of them.

; For example, 7 for overload everything.

; 0: No overload

; 1: Overload mail() function

; 2: Overload str*() functions

; 4: Overload ereg*() functions

mbstring.func_overload = 7

 

Érdekes módon az Operával már így jó lett nálam, de IE alatt még mindig trágya maradt, amit a következő oldott meg: Meg kell keresni a "default_charset" változott a php.ini-ben és UTF-8ra állítani szintúgy. Ez megoldja a dolgot IE alatt is. Persze a html fejlécből ekkor már nem hiányozhat a

<meta http-equiv='Content-Type' content='text/html; charset=utf8'> meta tag sem.

 

4. Ha véletlenül procedurálisan használjátok az SQL-t, akkor megint jön a fekete leves. A stringek átadásánál is ugyanúgy meg kell adni a karakterkódolást, mert különben megint valami default értéket tesz be, amit aztán ha sikerült átálítani, akkor gratula.

 

5. Noss: amiért a hajamat kitépem viszont. Amióta átálítottam ilyen módon a php interpretert, azóta viszont a phpMyAdmin kezdett el vicess dolgokat művelni. Ha ott adok meg egy stringet egyik procedúrám paramétereként, akkor két 'é' betűs szavaknál syntax errort kapok a mysql-től, mert az neki jó. Jelezni fogom, ha rájöttem, hogyan lehet ezt kiiktatni. valószínűleg, mivel ez is php alapú, becsúszott valami quote karakter a kódolásnál és beleszemelni látszék az SQL scriptbe.

 

Sok sikert a további kísérletezésekhez!

Edited by h.arpad
Link to comment
Share on other sites

h.arpad

Azért érdekes, amit írsz, mert a PHP kód egy olyan objektumpéldányt készít, amirõl nincs elõzmény, tehát valószínû, sohasem fogjuk így megtudni, mit is akar... Lehetséges, hogy PEAR-t használsz? De akkor azt illik feltüntetni...

 

A másik pedig: Az ékezetes betûkkel valószínû mindig gond lesz. Nem mindenki fér hozzá a szerver beállításaihoz, ha az nem a saját gépén van, úgyhogy azt nem tartom jó megoldásnak. A legegyszerûbb az ékezetes karaktereket kiváltani a HTML-kódjukra. Pl. é = é . A másik pedig, hogy én aztán állíthattam, amit akartam, a õ és û mindig csak "?" maradt, tehát ezeket mindenképpen ki kellett váltanom.

Link to comment
Share on other sites

payskin

Én is sokat szívtam ezzel, de azért amióta tudom, hogy SET NAMES, azóta nincs vele gondom. Az a lényeg, hogy be kell állítani a MySQL szervert valamire (latin2 vagy utf8), és utána ugyanarra a HTML fejlécet meg a SET NAMES-t, és kész.

Link to comment
Share on other sites

Greene

Én szoktam még a "collate" parancsot is használni fõleg különbözõ SQL implementációk között.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...