[PHP] Meerdere karaktersets converteren naar 1

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heey Mensen,
Een vraag waar ik op dit moment niet uit kom en waarbij jullie mij misschien kunnen helpen:

Ik ben op dit moment bezig met een grote migratie van gebruikers van het ene platform naar een ander. In principe dezelfde alleen is de structuur totaal anders (een nieuwe versie).
Het probleem ligt bij de oude versie. De kwaliteit en stabiliteit is niet meer zoals hij geweest was (daarom is er een nieuwe versie ontwikkeld). Een van de problemen is dat ik destijds geen rekening heb gehouden met karaktersets. Alles wat de gebruiker invoerde werd gewoon direct in de database (MYSQL) opgeslagen.

In de nieuwe versie doe ik dit wel. Bij elke POST en GET wordt deze array/string door een functie gehaald waarbij alle special characters omgezet worden middels de volgende regel code:
PHP:
1
$data = htmlentities ($data, ENT_QUOTES);

en als header voor mijn html pagina's gebruik ik het volgende:
code:
1
2
3
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

Dit werkt allemaal heel mooi en in mijn database staat alles opgeslagen als:
code:
1
&lt;span style=\&quot;font-weight: bold;\&quot;&gt; etc..

Teksten kan ik nu gewoon weergeven en eventuele HTML code geef ik weer met de volgende regel. Zodat dit weer als HTML gezien wordt.:
PHP:
1
html_entity_decode($value, ENT_QUOTES, "win-1251");

Alleen nu zit ik dus met die migratie. In de oude database zit dus een hele boel rommel in welke ik moet omzetten zodat het nieuwe systeem dit goed interpreteert. Soms staan bijvoorbeeld bullits als echte bullits in de database en soms als special character met een &-teken.

Ik heb vervolgens wat dingen geprobeerd waar ik nog niet uit kom. Als ik bijvoorbeeld de volgende string wil weergeven.

ë | • 1 < text

Dan krijg ik het niet voor me kaar om elke karakter op de juiste manier om te zetten. De ene keer wordt • goed gepakt en de andere keer <..

Iemand misschien een idee waar ik naar kan kijken?

Acties:
  • 0 Henk 'm!

  • Japidoff
  • Registratie: November 2001
  • Laatst online: 25-08 15:54
maybe op elke waarde uit je db eerst een check uitvoeren of er al html entities in staan,
zo ja, ga er vanuit dat de hele string "goed" is opgebouwd (met &lt enzo)
zo nee, ga er vanuit dat de hele string "slecht" is opgebouwd ( met > enzo)
mogelijkheid?

edit
hmmz, TS niet helemaal goed gelezen

maarre, in je header zeg je dat je pagina in UTF-8 is maar het decoden doe je volgens win-1251??
dat zijn 2 verschillende character sets.. ben niet echt een html goeroe, maar imo gaat dat niet werken

[ Voor 34% gewijzigd door Japidoff op 28-08-2006 17:14 ]

gang is alles


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Mag ik zeggen dat ik dit een hele vieze oplossing vind? :)

Waarom niet de text as-is opslaan, en pas converteren bij het tonen?
De omgeving waarmee de content is opgeslagen kan dat gewoon mijn zijn eigen output blijven werken, en aan de voorkant converteer je het naar wat je wilt.

Overigens heeft dit niets met karaktersets te maken, maar met HTML encoding.