ugrás a tartalomhoz

MySQL 5.0.24 Win + PHP latin 2 karakterekkel

montressor · 2006. Aug. 30. (Sze), 15.01
Hali!

mysql 5.0.24 wines adaptacioja,
show variables like '%_server';

character_set_server: latin2
collation_server: latin2_general_ci

ha mysql command lineban szurok be ekezetest megy.

PHP Version 5.2.0RC2-dev:
php.iniben:
default_charset = "iso-8859-2"

phpinfo()-bol:
default_charset iso-8859-2 iso-8859-2

az oldalak elejen:
<?php setlocale(LC_ALL,'hu_HU');
az oldalak elejen:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
megis, ha formbol szurok be, akkor az adatbazisba az ekezetek nem jol jelennek meg (é helyett ß)

mit felejtettem ki?
koszonom
 
1

SET CHARACTER SET

Rici · 2006. Aug. 30. (Sze), 16.10
Miután PHP-ből csatlakozol az adatbázishoz, add ki a következő két SQL parancsot mysql_query utasításokkal:

SET CHARACTER SET latin2

SET NAMES latin2
2

nem jo

montressor · 2006. Aug. 30. (Sze), 16.43
megtettem, ugyanugy kriksz-kraksz a mysqlben a dolog.
viszont, ha en ilyet:
<HTML>
    <HEAD>
    <meta name="keywords" lang="hu" content="szponzor kereső">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<meta http-equiv="Content-Language" content="hu">
   <TITLE>Proba</TITLE>
    </HEAD><BODY>
    <?php
    setlocale(LC_ALL,'hu_HU');
    echo "űáéúőpóüöÓÜÖÚŐPŰÁÉ";
    ?>
    </BODY>
    </HTML>
akkor ugyanugy hianyzik nehany ekezet a bongeszoben, es ennek nem sok koze a mysqlhez, nem lehet, h a php nem jol adja at neki?
koszonom
3

header

Rici · 2006. Aug. 30. (Sze), 17.09
PHP-ben még add ki a következő utasítást a fájl elején:

<?
header("Content-Type: text/html; charset=iso-8859-2");
?>
Ja, és ügyelj arra, hogy maga a .php fájl is latin2 kódolással legyen mentve. (Milyen szövegszerkesztőt használsz?)
4

re header

montressor · 2006. Aug. 30. (Sze), 18.34
Ez elmeletileg ugyanaz, mint a
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
sor nem?

no igen. a szerkeszto pspad, es ahogy irtad megneztem ansi-ban van :(
viszont 8859-2 alatt sem jo:
űáéúőpóüöÓÜÖÚŐPŰÁÉ

helyett ilyen:
uáéúopóüöÓÜÖÚOPUÁÉ


viszont utf-8ba is atraktam, a lapon kriksz-kraksz lett, persze mashol nem allitottam at, igy ertheto, legalabb volt valtozas, viszont latin2-vel baja van. Apropo latin2 az az iso-8859-2 ugye? Esetleg apache beallitasra gondoltam, de benne van az
AddDefaultCharset iso-8859-2

mysql-t kizarnam, mert igazandibol szimplan a test.php-vel sem jelennek meg rendesen, otthon meg kiprobalom ezt a header dolgot, de minden 5letet szivesen varok
koszonom
5

Nem ugyanaz

Rici · 2006. Aug. 30. (Sze), 19.12
Nem ugyanaz, az a legbiztosabb, ha van header és meta tag is.

A latin2 az gyakorlatilag ugyanaz, mint az iso-8859-2.

Ajánlanék egy olyan szövegszerkesztőt, ami rendesen tud menteni latin2-be, pl. Windows alatt magyar rendszerbeállításokkal a notepad abba ment alapból. Kivéve ha már előtte is utf-8 formátumú volt a megnyitott fájl, ekkor az ANSI nevűt kódolást kell mentésnél kiválasztani, hogy latin2-be mentsen. Persze nem túl advanced szövegszerkesztő, de egy próbát megér, hogy kiderüljön, hol van a hiba.

Az a legjobb egyébként, ha utf8-cal dolgozol minden szinten: a .php fájl szerkesztésekor, a header és a meta tag beállításakor, a mysql-hez való csatlakozás után, és mysql szerver beállításai közt is, meg persze a varchar mezők karakterkódolásánál is. Így semmilyen karakterrel nem lesz problémád. Egyetlen hátránya, hogy PHP alatt a hagyományos sztring-kezelő függvényekkel lehetnek gondok, pl. egy utf8 kódolású 'á' betűt két karakteresnek lát, meg hasonlók.
6

utf8

torso · 2006. Aug. 30. (Sze), 23.28
Én is csak azt tudom ajánlani, mint Rici.
Sok hasonló problémam volt, de mióta áttértem utf8-ra azóta semmi gondom ezzel.
Egyébként olvasd el ezt a cikket, engem ráébresztett sok mindenre!

G.
17

ez segíthet, de....

EL Tebe · 2007. Jan. 23. (K), 18.26
Hi!

Látom már régi a fenti téma és születtek bőven megoldások, mindenesetre hozzátenném a saját tapasztalatom:
A fentiekkel kiegészített mysql_query-k, nagymennyiségben hazavághatják a szerver erőforrásait!

Üdv:

EL
7

már volt megoldás

toxin · 2006. Aug. 31. (Cs), 07.30
hali,

http://weblabor.hu/forumok/temak/6714#comment-14259
bevált, nekem ugyan $db->query('set names cp1250'); van iconv - miatt de így is jó

form-oknál meg accept-charset attrib, ezzel a kitétellel
http://weblabor.hu/forumok/temak/14802

üdv t

ui: egyébként http://www.phpwact.org/php/i18n/charsets#character_sets_character_encoding_issues

egyébként saját tapasztalatból okulva, unicode-al várok php6 -ig :)
8

re

montressor · 2006. Aug. 31. (Cs), 09.55
koszonom, de ird le legyszi a sajat tapasztalataidat? azt hallotam, h
a stringkezeles kicsit mashogy alakul, mert mashogy tarol? esetleg vannak kulon stringkezelo fg-ek utf-8-hoz?
Az 5.0.24-ben mar van utf8_hungarian_ci rendezes...
koszi
9

re

toxin · 2006. Aug. 31. (Cs), 10.15
minden rajta van

http://www.phpwact.org/php/i18n/charsets#character_sets_character_encoding_issues

bocsi nem írom le még1x :)

már nyítottam róla topikot egyébként
http://weblabor.hu/forumok/temak/14514

ennél többet utf8 kódolásból szvsz nem szabad php alatt erőlteteni
http://ideafontana.com/agra_web/ alul nyelválasztás
:)

részemről ezt várom
And PHP 6?

Then all our problems magically vanish ;-) Specifically PHP 6 should have native understanding of Unicode and default to UTF-8 for output as well as a bunch of other stuff, building on the International_Components_for_Unicode project.




ui: form-ot meg így használom utf-8 alatt

<?php echo mb_convert_encoding($webesFormHandler->getHTML(),'UTF-8','ISO-8859-2');
felküdéskor form-ban accept-charset="ISO-8859-2" IE alatt meg

<?php
  if (function_exists('iconv'))
        {
            array_walk($_POST,create_function('$v,$k','
                    if (is_array($v))
                    {
                        $_POST[iconv("utf-8","ISO-8859-2",$k)] = $v;
                    }
                    else
                    {
                        $_POST[iconv("utf-8","ISO-8859-2",$k)] = iconv("utf-8","ISO-8859-2",$v);
                    }
                '));
        }
        elseif (function_exists('mb_convert_encoding'))
        {
            array_walk($_POST,create_function('$v,$k','
                    if (is_array($v))
                    {
                        $_POST[mb_convert_encoding($k,"ISO-8859-2","utf-8")] = $v;
                    }
                    else
                    {
                        $_POST[mb_convert_encoding($k,"ISO-8859-2","utf-8")] = mb_convert_encoding($v,"ISO-8859-2","utf-8");
                    }
                    
                '));
        }
        else
        {
            trigger_error('Cannot find any character conversion function in this system, please use iconv or mb_string extension');
        }

manuális visszakonvertálom iso-8859-alá, és várom a php6 -ot :))
10

probléma?

Hodicska Gergely · 2006. Aug. 31. (Cs), 12.12
Milyen problémád volt UTF-8 esetén, amit nem tudtál megoldani?


Felhő
11

re: problema?

montressor · 2006. Aug. 31. (Cs), 17.08
Igazandibol iso-55890-2-essel keztdem, es hianyzott az ő es ű betu. De igazandibol ha csinaltam egy ures html oldalt es benne egy kis php printtel ezeket a betuket, hiaba allitok header-t php header-rel se html meta-val nem jok ezek a karakterek. magat a php-t ansi-ba mentem es dos-os sorveg jelekkel, mert windowson fut az apache-php.

Most kiprobaltam, h az letrehoztam egy adatbazist
create database probak character set utf8 collation set utf8_hungarian_ci;
letrehoztam tablat, egy text col.-lal. Atalitottam mindenhol a utf-8-ra a codepage-t: php-ban a mar emlitett mindket fajta headert, atmentettem magat a php filet utf-8 kodolasura. Atalitottam a php.ini-ben:
default_mimetype = "text/html"
default_charset = "utf-8"

probaltam httpd.conf-bol
adddefaultcharset utf-8
es off-al is

probaltam beszurni siman ill. ugy is, hogy a set names utf-8 es a masik hozzavalot elkuldom a query-ben a connect es select db utan, megcsinalja, de ha megnezem a mysql_consolban select * from tabla
akkor a text oszlopom olvashatatlan grafikus jelekkel teli lesz :(
igaz a siman phpvel
a print('ekezetesbetuk');
tokeletesen megjelenik mindegyik karakter. szoval megint elakadtam
most vagy en vok bena (ez ugye nem elkepzelhetettlen) v. a wines php 5.0.24-dev -re gyanakszom, bar inkabb magamra.
Minden 5letet szivesen veszek
koszonom
12

elirtam

montressor · 2006. Aug. 31. (Cs), 19.20
elirtam a verziokat
mysql 5.0.24
PHP Version 5.2.0RC2-dev:
13

hosszú válasz

Hodicska Gergely · 2006. Szep. 3. (V), 09.30
Szia!


Nekiálltam csütörtökön válaszolni, aztán ez lett belőle. :)


Felhő
14

re hosszu valasz

montressor · 2006. Szep. 4. (H), 07.42
Jaj, nagyon koszonom segitseged. Meg sajna nem volt idom, de ma atragom magam. Kozben kaptam meg egy tippet, hatha: en angol windowst hasznalok, es ezen van az egesz rendszer, h tudjam hordozni (a vegleges perszen linux kornyezetben lesz), es azt tanacsolta egy baratom, h nezem meg a windows nyelvi es teruleti beallitasait, hatha az nem magyar: es most hogy nezem, lass csodat, tenyleg nem magyar. Ahogy kiprobaltam es elolvastam cikked valaszolok.
koszi
15

re re

montressor · 2006. Szep. 4. (H), 15.26
na igazandibol megneztem, elolvastam, de az sem segitett (sem a cikk, sem a teruleti beallitas)
Kovetkezo van:
win xp pro, es mysql 5.0.24
mysql.ini-ben:
default-character-set=utf8
itt nekem elbol nem jo a "default-collation = utf8_hungarian_ci", a mysql nem ugat ugyan, elindul, de a mysql command line mar szol, hogy:
unkown variable: "default-collation = utf8_hungarian_ci"
erdekes, mert a show collation mutatja, h van raadasul be van forgatva.
jo akkor kihagyom, indul mysql command line:
azert megnezem:
>show variables like '%_server';
character_set_server utf8
collation_server utf8_general_ci
pompas, nosza:
>\C 'utf8';
charset changed;
//feltetelezem ez a command line char setjet allitja
>create database proba;
ok
>use proba;
ok;
>create table a (szoveg text character set 'utf8' collate >'utf8_hungarian_ci') character set 'utf8' collate 'utf8_hungarian_ci';
ok
>set names 'utf8';
ok
insert into a (szoveg) values('öüóőúéáű');
data too long for column...

erdekes, h a show create table a; csak akkor mutatja a szoveget utf8 karakter keszletunek, ha a collate opciot elhagyom.
es akkor meg hol van a php...
16

Re mindenRe

montressor · 2006. Szep. 7. (Cs), 13.15
Na sziasztok!

erdekes az wines alatt a set charset utf-8/latin2 paros nem hasznalt.
Most kiprobaltam debian sarge alatt:
PHP Version 4.3.10-16
4.1.11a-4sarge
2.0.54-5sarge1

apacheban mindegy mi az AddDefaultCharset (jelenleg nalam utf-8), ha a header jol be van allitva
a tablak/adatbazisok character set-je/collationja fontos
a php-k character kodolasai
es ami szivatott: az altalatok emlitett
mysql_query("SET CHARACTER SET utf-8") ill latin2.
Erdekes, debian alatt mukodik, win alatt valamiert nem akart osszejonni.
Mindezt Opera 9.00-val kovettem el.
Koszi a helpet mindenkinek.