Időzóna: (GMT +1 óra) RSS - hozzászólások

SQL Karakterek

Szerző
Üzenet
JohanCorn
Regisztrált tag
Regisztrált tag


Csatlakozott: 2016.08.28. Vasárnap 21:38
Hozzászólások: 3
Hozzászólás Elküldve: 2016.08.28. 21:45    Hozzászólás témája: SQL Karakterek
Hozzászólás az előzmény idézésével
Üdv!

Van nekem egy Weboldalam, amin két külön adatbázisból iratok ki adatokat.
Mind kettő adatbázisban van egy-egy oszlop amiben szöveget tárolok. A szöveg ide egy külső forrásból kerül be az alábbi formában: PikHácsúú# (Ez csak egy példa a karakterekre.) Azonban csak az egyik adatbázisból kiolvasva alakul át rendes UTF-8-ra: PikHácsúú (Ez a példa arra, aminek kellene kinéznie.)
Ezért több helyen is kiolvashatatlan a szöveg az oldalon.
Ellenőriztem, hogy a táblák szerkezete ugyan olyan. Azt a táblát, ami működik saját kezűleg készítettem el, míg a nem megfelelően működőt egy weblap motor generálta.

Remélem tud valaki segíteni. Köszönöm!

UI. Nem tudom, hogy lenkelhetem a problémás oldalakat, de inkább nem teszem nehogy reklám miatt törölve legyen.

Felhasználó profiljának megtekintése Privát üzenet küldése
Ragadozo
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2008.05.08. Csütörtök 18:26
Hozzászólások: 638
Hozzászólás Elküldve: 2016.08.29. 07:44    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Szia!

Az adatbázisban a magyar ékezetes betűk letárolásához, kiolvasásához az utf8_general_ci kódolást érdemes (kell) használni.
Ehhez azonban a megfelelő, olvasható szöveget kell kódolnia.
A külső forrásból származó szöveget szerintem más kódolásban kapod meg, így a kiolvasása sem lesz olvasható.
Ezért
  1. vagy a külső forrásból származó szöveget először vissza kell kódolni "olvasható" formátumra, majd ezután letárolni.
  2. vagy letárolod, és a kiolvasáskor kódolod át olvasható szövegre.


Én írtam egy variánst arra, hogy a fórumban lehessen használni ékezetes karaktereket is a linkeknél, mivel ez manapság már egyre jobban divat, viszont a phpbb fórum nincs erre felkészítve.

Tehát ez csak egy tipp, de ez alapján "házibarkács" módon meg tudod oldani.

Kód:

         var str = olvashatatlan szöveg;
         var replace = new Array("á", "é", "í", "ö", "ő", "ó", "ú", "ü", "ű", "Á", "É", "Í", "Ö", "Ő", "Ó", "Ú", "Ü", "Ű");
         var papa = new Array("%c3%a1", "%c3%a9", "%c3%ad", "%c3%b6", "%c5%91", "%c3%b3", "%c3%ba", "%c3%bc", "%c5%b1", "%c3%81", "%c3%89", "%c3%8d", "%c3%96", "%c5%90", "%c3%93", "%c3%9a", "%c3%9c", "%c5%b0");
         for (var i=0; i<replace.length; i++) {
            str = str.replace(papa[i], replace[i]);
         }
         
         olvashatatlan szöveg (most már olvasható) = str;

Mivel nem tudom így látatlanul, hogy milyen kódolású szöveget kapsz a külső forrásból, az egyes ékezetes betűkhöz tartozó kódolást neked kell betűnként a "var papa" változóba berakni.
.

Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése
JohanCorn
Regisztrált tag
Regisztrált tag


Csatlakozott: 2016.08.28. Vasárnap 21:38
Hozzászólások: 3
Hozzászólás Elküldve: 2016.08.29. 14:43    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Engedelmeddel megmutatom, hogy pontosan miről is van szó.

1. Adatbázisban:
- Egy oszlop és egy sor keresztezésében így található meg: Hirdetés
- Ha a weboldalon mutatom meg az értéket, akkor szépen, így jelenik meg: Hirdetés

2. Adatbázisban:
- Egy oszlop és egy sor keresztezésében szintén így található meg: Hirdetés
- Ha a weboldalon mutatom meg az értéket, akkor meg ugyan így mutatja: Hirdetés

Megjegyzem, az 1. adatbázisban lévő táblát én csináltam, míg a 2. adatbázisban lévőt a weboldalon motorja készítette. Tovább ellenőriztem, hogy az 1. az latin1_swedish_ci kódoltást használt legelőször, míg a 2. utf8_hungarian_ci-t. Ezt a későbbiekben latin1_swedish_ci-re állítottam, de semmi nem változott.

Ha lehet, akkor mutatom is a dolgot.

1. Eset: http://www.counter16strike.hu/index.php?page=s3_kitiltasok
Itt megfigyelhető az Indok és Admin oszlopban, hogy szépen írja ki és ismétlem az adatbázisban cifrán van.

2. Eset: http://www.counter16strike.hu/index.php?page=s3
Itt megfigyelhető a Játékos és Admin oszlopban, hogy ugyan úgy cifrán írja ki, mint az adatbázisban van.

Tovább, az említett segítséged alapján az első dolog nem kivitelezhető, mert a külső forrásom egy játékból származik. A másodikat meg nem tudom mindenhol átírni és rengeteg olyan karakter van, amit használnak és a külső forrásból kerül be.

Az a furcsa, hogy az 1. esetben jól mennek a dolgok, míg a 2. esetben nem jók, holott ugyan úgy kellene mennie. Én arra gyanakszom, hogy a hiba a szerkezetben van, de egyszerűen nincs több opció amit módosíthatnék.

Látható, hogy nem vagyon nagyon gyakorolt a dologban. Éppen csak próbálgatom ezt a dolgot. :)

UI.: És köszönöm az eddigi segítséged is!

Felhasználó profiljának megtekintése Privát üzenet küldése
Ragadozo
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2008.05.08. Csütörtök 18:26
Hozzászólások: 638
Hozzászólás Elküldve: 2016.08.29. 15:33    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Szerintem nem értetted, amire céloztam, bár lehet, hogy nem fejeztem ki magam eléggé érthetően.

Az a véleményem, hogy az adatbázisba a külső forrásból kódolatlanul jön az anyag, ami így kerül letárolásra, és így ezért azt is kapod vissza.
Ezért írtam azt, hogy a 2. adatbázisba vagy
1. a letárolás előtt kellene az ékezetes betűket vissza kódolni, vagy
2. a kiolvasáskor kellene visszakódolni, és az így átkódolt szöveget megjeleníteni.
Az 1. pont az ajánlott, mert azt csak egyszer kell megoldani.

Az meg kifejezetten előnyös lenne, ha mindenhol ugyanazt a kódolást használnád, és a magyar nyelvű oldalakon ajánlott a utf8_general_ci kódolás.

:)

Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése
JohanCorn
Regisztrált tag
Regisztrált tag


Csatlakozott: 2016.08.28. Vasárnap 21:38
Hozzászólások: 3
Hozzászólás Elküldve: 2016.08.29. 23:06    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Értettem én, csak próbáltam segítséget adni, hogy segíthess nekem azt kitalálni itt miért nem jó máshol meg miért. Igen. :)

Bár már ezzel is nagyon sokat segítettél. Köszönöm szépen, valószínűleg az 1. pontoddal kezdek valamit.

Felhasználó profiljának megtekintése Privát üzenet küldése
Hozzászólások megtekintése:  

Időzóna: (GMT +1 óra) RSS - hozzászólások
Nem készíthetsz új témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem módosíthatod a hozzászólásaidat a fórumban.
Nem törölheted a hozzászólásaidat a fórumban.
Nem szavazhatsz ebben fórumban.

Hirdetés
Hirdetés