[PHP & MySQL] internal encoding probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

ik ben met alles overgeschakeld van ISO naar UTF-8 (MySQL, PHP). Dit is goed verlopen want als ik even een test doe, door een resultset te tonen in HTML (met utf-8 header) dan worden de vreemde tekens goed getoond... Er is enkel een probleem als ik bijvoorbeeld een htmlentities($string) doe over de gegevens uit de database... dan krijg ik vreemde tekens op mijn scherm. Echter, als ik het volgende doe

code:
1
htmlentities(utf8_decode($result->data));


dan krijg ik wèl goeie html karakters

ik zet ook de mb_internal_encoding("UTF-8"); dus dat staat ook goed, maar toch blijf ik vreemde tekens krijgen. Weet iemand wat ik over het hoofd gezien heb?

Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
code:
1
htmlentities (string $string [, int $quote_style [, string $charset [, bool $double_encode]])


Probeer de $charset eens in te stellen op UTF-8

Acties:
  • 0 Henk 'm!

Verwijderd

Waar het fout kan gaan:
- Browser encoding, stuur een header mee die UTF-8 specificeerd
- Mysql connection encoding, 'SET NAMES'? weet niet precies maar iets in de richting.
- Table charset en column collition. Check of deze allebij UTF-8 hebben gespecificeerd.

Als je code niet online staat of meer gespecificeerd is kunnen wij ook alleen maar gissen.

edit:

en zoals boven gezegt word, de charset van htmlentities. :+

[ Voor 10% gewijzigd door Verwijderd op 09-04-2008 16:48 ]


Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

1. Voer de Query "SET NAMES 'UTF-8' COLLATE 'UTF-8_swedish_ci" als 1ste query uit in je script om je client_connection goed te zetten
2. Zorg dat al je phpstring commandos via mb_functions (multibyte functions) verloopt
3. Set Content-Type : text/html;charset=UTF-8 in je Metaheader en/of httpheader

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb al deze dingen gedaan, nogmaals... de data komt als UTF-8 uit de database (ook gechecked doormiddel van mb_detect_encoding($string)).

Ik heb wel een voorlopige oplossing gevonden:
code:
1
htmlentities($data,ENT_COMPAT,"UTF-8");


maar ik ga dit niet overal in mijn code vervangen natuurlijk. Kan ik dit niet op de server veranderen?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

waarom zou je htmlentities willen gebruiken als je toch al overal UTF8 gebruikt?

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op woensdag 09 april 2008 @ 16:52:
waarom zou je htmlentities willen gebruiken als je toch al overal UTF8 gebruikt?
Komop, je wilt toch htmlentities tonen in je webpagina, in plaats van character entities. (Valid XHTML etc...)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Verwijderd schreef op woensdag 09 april 2008 @ 16:58:
[...]


Komop, je wilt toch htmlentities tonen in je webpagina, in plaats van character entities. (Valid XHTML etc...)
htmlspecialchars is dan voldoende. De overige named entities zijn sowieso niet geldig in XHTML

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op woensdag 09 april 2008 @ 17:07:
[...]

htmlspecialchars is dan voldoende. De overige named entities zijn sowieso niet geldig in XHTML
Ok duidelijk, maar ff terug naar het topic... is er toch een instelling op de server die veranderd kan worden waardoor ik gewoon htmlentities() kan aanroepen in mijn code. Ik heb namelijk honderden pagina's code en ik wil die niet allemaal gaan vervangen

Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

Verwijderd schreef op woensdag 09 april 2008 @ 17:47:
Ok duidelijk, maar ff terug naar het topic... is er toch een instelling op de server die veranderd kan worden waardoor ik gewoon htmlentities() kan aanroepen in mijn code. Ik heb namelijk honderden pagina's code en ik wil die niet allemaal gaan vervangen
PHP:
1
mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8')
maar Crisp heeft hierin toch gelijk hoor.
Vervang (dmv van een script) in al je codepages htmlentities functies naar htmlspecialchars ;)

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
glashio schreef op woensdag 09 april 2008 @ 18:27:
[...]
PHP:
1
mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8')
maar Crisp heeft hierin toch gelijk hoor.
Vervang (dmv van een script) in al je codepages htmlentities functies naar htmlspecialchars ;)
Dit kan blijkbaar niet in php.ini gezet worden, of zie ik dit fout?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

htmlspecialchars werkt als het goed is ook gewoon in UTF8 aangezien de karakters die het vervangt gewoon ASCII zijn en dus in UTF8 ook single-byte.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op woensdag 09 april 2008 @ 17:47:
Ik heb namelijk honderden pagina's code en ik wil die niet allemaal gaan vervangen
Een functieaanroep veranderen hoeft helemaal niet zoveel werk te zijn, is een van de simpelste refactoring taakjes. Pas als je de html* functies werkelijk overal in je code hebt staan wordt het een rotklus, maar dan weet je meteen dat je deze functies in de verkeerde/onduidelijke context gebruikt. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

Volgens mij moet je eens naar de volledige flow in je applicatie kijken. Je bent volgens mij data heen en weer aan het gooien tussen UTF-8 en ISO, waarna het ergens fout gaat.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
BCC schreef op donderdag 10 april 2008 @ 09:59:
Volgens mij moet je eens naar de volledige flow in je applicatie kijken. Je bent volgens mij data heen en weer aan het gooien tussen UTF-8 en ISO, waarna het ergens fout gaat.
- Ik heb mijn MySQL db naar UTF-8 omgezet inclusief alle tabellen
- In php.ini is ook alles naar UTF-8 omgezet (internal encoding, output,..)
- Als ik mb_detect_encoding($string)) opvraag, krijg ik UTF-8 terug, dus dat zit goed
- Als ik htmlentities($string,ENT_COMPAT,"UTF-8") doe, dan gaat het ook goed, dus ik de encoding van htmlentities is dus nog niet standaard UTF-8... dat is nog het enige probleem.

Maar goed, ik ben wel bereid om alle htmlentities om te zetten naar htmlspecialchars. Ik vind het alleen vreemd dat sites zoals http://www.apple.com/fr/ ook utf-8 encoding hebben maar toch htmlentities tonen

[ Voor 4% gewijzigd door Verwijderd op 10-04-2008 10:53 ]


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

Begrijpt je browser ook dat hij UTF8 moet verwachten? Die stap mis ik nog. En welke versie van PHP draai je? En apple.com/fr doet geen html entities.
Programme développeurs iPhone
En t.net ook niet.

[ Voor 52% gewijzigd door BCC op 10-04-2008 12:20 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

Verwijderd schreef op donderdag 10 april 2008 @ 10:43:
Ik vind het alleen vreemd dat sites zoals http://www.apple.com/fr/ ook utf-8 encoding hebben maar toch htmlentities tonen
Is ook raar volgens w3.org.
Je zou het alleen nog gebruiken als je een UTF-16 symbool wil tonen die niet in UTF-8 voorkomt, maarja in de praktijk...

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
BCC schreef op donderdag 10 april 2008 @ 12:15:
Begrijpt je browser ook dat hij UTF8 moet verwachten? Die stap mis ik nog. En welke versie van PHP draai je? En apple.com/fr doet geen html entities.
jups, browser zou het moeten begrijpen...
code:
1
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8;" />

code:
1
Programme d&eacute;veloppeurs iPhone
... hoezo geen htmlentities

[ Voor 51% gewijzigd door Verwijderd op 10-04-2008 16:40 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Verwijderd schreef op donderdag 10 april 2008 @ 16:36:
[...]


jups, browser zou het moeten begrijpen...
code:
1
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8;" />
:'( Het is in dit geval niet de META die dat realiseert maar de HTTP content-type header

En ja, je kan in UTF8-encoded text/html named entities gebruiken. Of het nuttig is is een tweede... zelfs in extended latin is het meestal niet nuttig.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

Verwijderd schreef op donderdag 10 april 2008 @ 16:36:
[...]
code:
1
Programme d&eacute;veloppeurs iPhone
... hoezo geen htmlentities
Sorry, firebug zet het blijkbaar terug.

[ Voor 21% gewijzigd door BCC op 10-04-2008 19:24 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.

Pagina: 1