ugrás a tartalomhoz

ékezet még1x - légyszi segítsetek, elvesztem

baltazar11 · 2007. Feb. 13. (K), 12.09
Sziasztok,
légyszi segítsetek, nem értem, mit nem csinálok jól, és egy hete szívok mindenféle beállítással, elolvastam asszem mindent, amit találtam, és nem megy...
Adott egy spéci rendszer (Active Agenda), sourceforge-ról. Alapban két nyelvet tud, angolt és svédet, én fordítanám magyarra, "I18n" .po/.mo állományból (gettext) működik, környezet xampp 1.5.5 windowson.
mysql-ben minden tábla és minden mező utf-8
és a gond: php-ben mbstring-el menne, de baj van:

- amikor az mbstring.internal_encoding = Off, akkor a képernyőn majdnem jó jelennek meg a karakterek, csak a hosszú ő-ű akasztja ki a rendszert (de az nagyon, ott mondjuk van egy kis bug is), a többi ékezet a menüben/keretrenszerben szépen jön, viszont azok a tartalmak, amik adatbázisból jönnének, csúnyákat tartalmaznak hosszú ő/ű helyén, és a phpmysqladmin-al nézve is csúnyák kerülnek az adatbázisba. (viszont kézzel beleírt hosszú ő/ű phpmysqladmin-ban még szép, a rendszerben viszont még csúnyább)

- amikor az mbstring.internal_encoding = UTF-8, akkor a képernyőmenüben/keretrendszerben egyszerűen nincs karakter az ékezetesek helyén, viszont az adatbázisból jövő tartalmak kifogástalanok, de az adatbázisban utf-8 -ra kódolt karatkerek vannak (tehát nem ő/ű, hanem &-val kezdődő kódok), viszont amit kézzel beírok az adatbázisba ű/ő-t, az jól jelenik a képernyőn is.

a képernyőn a menüt egy .js rendszer rajzolja (Menu5G)


php.ini (idevágó részei):

default_mimetype = "text/html"
default_charset = "utf-8"
mbstring.language = Neutral
mbstring.internal_encoding = off / UTF-8
mbstring.http_input = off
mbstring.http_output = UTF-8
a többi mbstring ki van kommentezve


my.ini

[client]
default-character-set = utf8
[mysqld]
character-set-server = utf8
#character-set-connection = utf8
#character-set-database = UTF-8
#character-set-results = UTF-8
skip-character-set-client-handshake = On
#collation-server = utf8_unicode_ci
init-connect = "SET NAMES utf8"
default-collation = utf8_unicode_ci


httpd.conf
AddCharset UTF-8 .php .htm .html .js .java .css
AddDefaultCharset UTF-8


Légyszi segítsetek, előre is köszi:

baltazár
 
1

MySQL kapcsolat

janoszen · 2007. Feb. 13. (K), 22.42
A "SET NAMES" SQL parancs lesz a barátod. És a légyszi segítsetek című frázisokat nem szükséges hozzátenni.
2

köszi, 'set names' megvolt, nem megy

baltazar11 · 2007. Feb. 14. (Sze), 10.48
Szóval a set names megvan a my.cnf-ben is, de a connect után is egyből megy set names, set caracter set (UTF-8), de a helyzet változatlan: vagy az adatbázismezők jelennek meg jól, ilyenkor a .po fileból az ékezetek helyén semmi nincs (mbstring int enc utf8), vagy a .po file ékezetes karatkerei majdnem jók (hosszú ő/ű =?) (mbstring inc. enc off), de ekkor az adatbázismezőkben az ékezetes karakterek lesznek hieroglifák.
segítség lenne, ha van valakinek telepített php portálrendszere, .po/.mo típusú fordítással (talán a joomla ilyen), és megnézné nekem, hogy ott:
a., hogy van konfigurálva a php.ini/my.cnf/httpd.conf
b. a gettext-et hívó függvényt kimásolná nekem

köszi:

baltazar
3

Pont az?

janoszen · 2007. Feb. 14. (Sze), 13.32
Hm. Nem lehet, hogy ami adat kijön az adatbázisból, azt megprocesseli a dolgot? Próbáld meg Latin1-re állítani...
4

latin1-re ?

baltazar11 · 2007. Feb. 14. (Sze), 17.44
ha latin1-re állítom, definitíve elvesznek a hosszú ő/ű-k, nem ?
5

Nem feltétlen

janoszen · 2007. Feb. 14. (Sze), 18.28
Arra gondolok, hogy mi van akkor, ha eleve nem jó kódolással tároltad bele az adatbázisba. Ezért próbáld meg Latin1-gyel vagy 2-vel.
6

latin2

baltazar11 · 2007. Feb. 14. (Sze), 18.40
az elmúlt fél napban azon szórakáztam, hogy latin2-be tettem az egészet, és úgy tűnik, így már csak annyi a gond, hogy a nem adatbázisból hanem fileból (azaz .po/.mo) jövő gettext-es hosszú ő/ű nem jelenik meg (menük, táblázat-fejlécek, gombok feliratai, stb) , a menu5G le is akad tőle, a sima megjelenítés meg az első hosszú ű/ő utáni részt egyszerűen levágja.
7

egy megoldas

monghuz · 2007. Feb. 15. (Cs), 12.48
Ha szerencséd van ezt elég az index.php legelejére beszúrni (még a <html> tag előtt), ha nem mükszik akkor minden egyes php file első sorába.. (ha AJAX-os cuccot csinálsz az utóbbi megoldás játszik)
header("Content-Type: text/html; charset=iso-8859-2");
Ezt a funciót is az előbbi megkötésekkel kell beszúrni, annyi az eltérés hogy ez már lehet a </head> tag után is...
function szf($text) {
	$text = str_replace ("\r\n", "<br> ", $text);
	$text = str_replace ("ő", "&#337;", $text);
	$text = str_replace ("Ő", "&#213;", $text);
	$text = str_replace ("ű", "&#369;", $text);
	$text = str_replace ("Ű", "&#219;", $text);
}
Ja és persze a <head></head> részbe az alábbi sort is szúrd be
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
Az a lényeg hogy az adatbázisba minden bemenő adaton végrehajtod asz sz() fv.-t. Ezzel a módszerrel eddig egy negatívumot tapasztaltam, mégpedig hogy pl AJAXos keresés közben az ékezetes karaktereket nem tudta átvinni, ezért minden ékezetes karakter helyett az ékezet nélküli változatát kell használni.. pl: Kovács Gézát keresve Kovacs Gezat kell beírni..

Remélem tudtam segíteni.
bye monghuz
8

köszi, de reménytelennek tűnik

baltazar11 · 2007. Feb. 15. (Cs), 23.12
...mivel igaz ugyan, hogy ott lehet belenyúlni, ahol akarsz, de elég nagy és komoly cuccról van szó, az adatbázisban 780 táblát (nem elírás) kezel, csak a modulonkénti, xml specifikáció alapján generált php kód 150 mega (kb 400 file), a .po szótár 8500 sort tartalmaz...úgyhogy a kód módosítása elég reménytelennek tűnik (nekem, aki most kezdem megismerni ezt a rendszert és a php-val sem éltem még meg az aranylakodalmat..;o))), és ha meg is tudnám tenni, csak az svn trackbe visszavezethető szintű belenyúlásnak lenne értelme, ahhoz pedig én még biztosan láma vagyok
de mivel gyakorlatilag párhuzamosan halad a svéd nyelvű, utf-es verzió is, abban bízom, hogy a problémáim nem egyediek, és a svéd miatt úgyis megoldják (bár egyszerre win-es és idegen nyelvű problémázás elég spécinek tűnhet számukra)