[PHP/MySQL/HTML] Vreemde tekens probleem

Pagina: 1
Acties:
  • 141 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Er zijn een aantal vreemde tekens die ik uit een databse moet halen en vervolgens via PHP op een HTML pagina moet laten zien.
Als ik de tekens in PHP laat echoen gaat het goed, ook als ik ze rechtstreeks in HTML zet.

In de database staat de row als latin2_general_ci opgeslagen (utf8_polish_ci heb ik ook geprobeerd).
In de header van mij HTML staat <meta http-equiv="Content-Type" content="text/html; charset=iso-8">.
Ook zijn alle includes opgeslagen met Oost Europese encoding.

Als ik via PHPMyAdmin naar de inhoud kijk wordt het wel goed weergegeven..

Het gaat om enkele poolse karakters, bijvoorbeeld de 'ł' en 'ę'.

Iemand met een oplossing?

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Met unicode zouden ze gewoon goed weergegeven moeten worden.

Overigens, wanneer worden ze NIET goed getoond? phpadmin en html werken wel, welke niet?

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wanneer ik ze via PHP uit de database haal en vervolgens echo :).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op utf8_unicode_ci werkt hij ook niet..

Acties:
  • 0 Henk 'm!

  • joggie
  • Registratie: November 2004
  • Laatst online: 03-02 15:00

joggie

Wie niet gek is, is saai

en wanneer je zelf handmatig de tekenset van je browser instelt?

Joggie ;)


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Werkt

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

?

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

Verwijderd

Andere karakter set misschien?

probreer bijvoorbeeld eens: iso-8859-1

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee, dat werkt niet.
Als ik de tekens ook gewoon in de HTML zet laat hij ze wel goed zien.

Acties:
  • 0 Henk 'm!

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 17-09 22:52
't is leuk dat je een collation definieert (utf8_polish_ci), maar heb je de character-set van de tabel dan ook wel als utf8 gedefinieerd ?

code:
1
2
3
CREATE TABLE `bla` (
<table-definitie
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Note dat HTTP headers boven meta-tags gaan; als je webserver een iso-8859-1 charset header meegeeft dan kan je doen wat je wilt met meta-tags maar dat zal dan niets uitmaken...
Zorg ook dat je PHP sourcefiles als UTF-8 gecodeerd worden opgeslagen.

[ Voor 17% gewijzigd door crisp op 02-03-2006 23:22 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb alles geprobeerd wat jullie hebben gemeld, ik zal nog een keer uitleggen hoe het op dit moment staat.
Als ik de PHP file opsla als UTF8 laat hij niks meer goed zien, ook niet de tekens die ik gewoon in de html zet.
Ik moet hem hiervoor op Centraal Europees (Windows) zetten.
Hij laat nu tekst die ik HTML zet wel goed zien, dingen die uit de database komen niet.

Hier een dump van de database:

code:
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `tabel` (
  `titel` varchar(255) NOT NULL default '',
  `url` varchar(255) NOT NULL default '',
  `id` mediumint(4) NOT NULL auto_increment,
  `status` tinyint(2) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;


INSERT INTO `tabel` VALUES ('by&#322;a by mozliwo&#347;&#263;', 'http://url.nl', '', 1);


Ook heb ik het al geprobeerd met latin2.

Dit is wat hij nu laat zien:
Rechtstreeks in HTML geplakt: była by mozliwość
Via PHP uit database: by?a by mozliwo??

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

En wat zeggen de HTTP headers over de charset?

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe achterhaal ik dat?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die rare codes die je ziet voor vreemde tekens in het stuk code zie je in PHPMyAdmin als de juist tekens overigens.

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Zet je trouwens ook al de charset van je connectie? Ik gebruik de volgende dingen:

code:
1
2
3
4
5
ini_set('mbstring.internal_encoding', 'utf-8');
ini_set('mbstring.http_input', 'utf-8');
ini_set('mbstring.http_output', 'utf-8');
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES 'utf8'");

Rustacean


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah, dat werkt al deels!
Hij laat nu de meeste karakters op twee na goed zien.

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Dan heb je waarschijnlijk iso-8859-1 in je tabel staan. Hier is een conversie-functie:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$cp1252 = array(
    "\xc2\x80" => "\xe2\x82\xac", /* EURO SIGN */
    "\xc2\x82" => "\xe2\x80\x9a", /* SINGLE LOW-9 QUOTATION MARK */
    "\xc2\x83" => "\xc6\x92",     /* LATIN SMALL LETTER F WITH HOOK */
    "\xc2\x84" => "\xe2\x80\x9e", /* DOUBLE LOW-9 QUOTATION MARK */
    "\xc2\x85" => "\xe2\x80\xa6", /* HORIZONTAL ELLIPSIS */
    "\xc2\x86" => "\xe2\x80\xa0", /* DAGGER */
    "\xc2\x87" => "\xe2\x80\xa1", /* DOUBLE DAGGER */
    "\xc2\x88" => "\xcb\x86",     /* MODIFIER LETTER CIRCUMFLEX ACCENT */
    "\xc2\x89" => "\xe2\x80\xb0", /* PER MILLE SIGN */
    "\xc2\x8a" => "\xc5\xa0",     /* LATIN CAPITAL LETTER S WITH CARON */
    "\xc2\x8b" => "\xe2\x80\xb9", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
    "\xc2\x8c" => "\xc5\x92",     /* LATIN CAPITAL LIGATURE OE */
    "\xc2\x8e" => "\xc5\xbd",     /* LATIN CAPITAL LETTER Z WITH CARON */
    "\xc2\x91" => "\xe2\x80\x98", /* LEFT SINGLE QUOTATION MARK */
    "\xc2\x92" => "\xe2\x80\x99", /* RIGHT SINGLE QUOTATION MARK */
    "\xc2\x93" => "\xe2\x80\x9c", /* LEFT DOUBLE QUOTATION MARK */
    "\xc2\x94" => "\xe2\x80\x9d", /* RIGHT DOUBLE QUOTATION MARK */
    "\xc2\x95" => "\xe2\x80\xa2", /* BULLET */
    "\xc2\x96" => "\xe2\x80\x93", /* EN DASH */
    "\xc2\x97" => "\xe2\x80\x94", /* EM DASH */
    "\xc2\x98" => "\xcb\x9c",     /* SMALL TILDE */
    "\xc2\x99" => "\xe2\x84\xa2", /* TRADE MARK SIGN */
    "\xc2\x9a" => "\xc5\xa1",     /* LATIN SMALL LETTER S WITH CARON */
    "\xc2\x9b" => "\xe2\x80\xba", /* SINGLE RIGHT-POINTING ANGLE QUOTATION */
    "\xc2\x9c" => "\xc5\x93",     /* LATIN SMALL LIGATURE OE */
    "\xc2\x9e" => "\xc5\xbe",     /* LATIN SMALL LETTER Z WITH CARON */
    "\xc2\x9f" => "\xc5\xb8"      /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
);

function cp1252_to_utf8($str) {
    global $cp1252;
    return  strtr(utf8_encode($str), $cp1252);
}

Rustacean


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hartelijk dank allemaal!
Het werkt nu perfect :).

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Manuzhai schreef op vrijdag 03 maart 2006 @ 21:37:
Dan heb je waarschijnlijk iso-8859-1 in je tabel staan. Hier is een conversie-functie:
cp1252 != iso-8859-1

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Okay, maar het hielp wel. :P

(Kutverhaal, maar bij mij was het een one-off conversie, dus dan maakt het niet zoveel uit.)

Rustacean

Pagina: 1