Collatie
Als ik in phpmyadmin kijk bij collatie staat hier overal: latin1_swedish_ci
Nu ben ik bezig met een php script om een XML te lezen en naar de database te schrijven. Bovenop de XML staat:
Bovenin mijn script staat in de head:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Als ik de xml uitlees krijg ik de karakters netjes te zien op de pagina.
Wanneer ik de gegevens in de database zet met enkel mysql_real_escape_string ertussen als beveiliging krijg ik: ? waar ™ zou moeten staan.
Nu heb ik de collatie op utf8_general_ci gezet en opnieuw de gegevens in de database gezet, maar nog steeds niet goed.
Wat gaat er of doe ik fout?
Alvast bedankt!
EDIT:
- Wat is het verstandigste als standaard collatie?
- Waar moet ik wel/niet utf8_encode()/utf8_decode() gebruiken?
- Ik heb meegekregen dat ik gegevens zo origineel mogelijk in een database moet plaatsen en dus niet van een ™ ™ maken, correct?
- Inmiddels ook mysql_set_charset('utf8',$verbinding) gebruikt, hierbij krijg ik helemaal geen karakters te zien en de tekst die daar achteraan zou moeten komen is er ook niet.
Kortom: Wat is nou waar het verstandigste om te doen?
Nu ben ik bezig met een php script om een XML te lezen en naar de database te schrijven. Bovenop de XML staat:
Bovenin mijn script staat in de head:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Als ik de xml uitlees krijg ik de karakters netjes te zien op de pagina.
Wanneer ik de gegevens in de database zet met enkel mysql_real_escape_string ertussen als beveiliging krijg ik: ? waar ™ zou moeten staan.
Nu heb ik de collatie op utf8_general_ci gezet en opnieuw de gegevens in de database gezet, maar nog steeds niet goed.
Wat gaat er of doe ik fout?
Alvast bedankt!
EDIT:
- Wat is het verstandigste als standaard collatie?
- Waar moet ik wel/niet utf8_encode()/utf8_decode() gebruiken?
- Ik heb meegekregen dat ik gegevens zo origineel mogelijk in een database moet plaatsen en dus niet van een ™ ™ maken, correct?
- Inmiddels ook mysql_set_charset('utf8',$verbinding) gebruikt, hierbij krijg ik helemaal geen karakters te zien en de tekst die daar achteraan zou moeten komen is er ook niet.
Kortom: Wat is nou waar het verstandigste om te doen?
Gewijzigd op 22/12/2010 21:56:22 door Roy D
Gesponsorde koppelingen:
Roy D op 22/12/2010 21:37:06:
Nu heb ik de collatie op utf8_general_ci gezet en opnieuw de gegevens in de database gezet, maar nog steeds niet goed.
Hoe zit het met de collatie van je tabellen? Je kan in MySQL de collatie per tabel aangeven.
Verder http://www.pfz.nl/wiki/charactersets/, op die manier doe ik het en het lijkt vooralsnog altijd te werken. Database utf8, verbinding utf8, html utf8, en htmlspecialchars(..., ENT_COMPAT, 'utf8') voor het veilig stellen van m'n html.
Ik zet alles in utf8.
database collatie,
html meta tags, header() ...
Merk op: als je een html pagina hebt in utf-8 met een formulier, wordt de data ook in utf-8 doorgestuurd; dan kan je ze best ook opslaan in utf-8.
Ik bedoel: je kan beter gaan voor alles of niets.
database collatie,
html meta tags, header() ...
Merk op: als je een html pagina hebt in utf-8 met een formulier, wordt de data ook in utf-8 doorgestuurd; dan kan je ze best ook opslaan in utf-8.
Ik bedoel: je kan beter gaan voor alles of niets.
Heb je toevallig SET NAMES al eens gebruikt? Dat werkt ook nog wel eens :-)
Mysql_query met daarin de SET NAMES als eerste uitvoeren nadat je een verbinding maakt :-)
Mysql_query met daarin de SET NAMES als eerste uitvoeren nadat je een verbinding maakt :-)
Kris Peeters op 23/12/2010 10:04:53:
Ben ik het helemaal mee eens en op het werk gaan we ook met alle applicaties en databases naar UTF8!Ik zet alles in utf8.
Ik bedoel: je kan beter gaan voor alles of niets.
Ik bedoel: je kan beter gaan voor alles of niets.
John D op 23/12/2010 10:09:32:
Ben ik het helemaal mee eens en op het werk gaan we ook met alle applicaties en databases naar UTF8!
Zolang je maar onthoudt dat functies als strlen vreemd gaan doen omdat in UTF8 tekens als é uit meer dan één byte bestaat, en strlen bytes telt.
Gewijzigd op 23/12/2010 10:18:11 door Jelmer rrrr
Dat Latin-Swedish standaard is, lijkt me meer een overblijfsel uit ver-vervlogen tijden (naar internet normen). Toen was het waarschijnlijk al een vrij willekeurige keuze.
Nu is er geen enkel technisch argument meer om dat nog als default te hebben.
Maar spreek me vooral tegen mocht het niet juist zijn.
Nu is er geen enkel technisch argument meer om dat nog als default te hebben.
Maar spreek me vooral tegen mocht het niet juist zijn.
Jelmer rrrr op 23/12/2010 10:17:35:
Waarom noem je dat vreemd? Dit is normaal gedrag en verder is het zo dat het tonen van de double-byte characters geen twee posities inneemt. Geef anders eens een voorbeeld waar je last hebt van dit "vreemd" gedrag?Zolang je maar onthoudt dat functies als strlen vreemd gaan doen omdat in UTF8 tekens als é uit meer dan één byte bestaat, en strlen bytes telt.
Hier zie ik een aantal voorbeelden met probleem en oplossing voor strlen
http://php.net/manual/en/function.strlen.php
Bij de eerste (en volgende) commentaren.
http://php.net/manual/en/function.strlen.php
Bij de eerste (en volgende) commentaren.
Gewijzigd op 23/12/2010 12:11:40 door Kris Peeters
$length = strlen(utf8_decode($s));
@Jelmer rrrr: ik ga het eens doorlezen op PFZ. Ik hoop dat het lukt.
Ik laat weer van me horen.
EDIT:
Ga ik gelijk over naar een volgende vraag, wat research gedaan naar InnoDB vs Myisam. Iedereen raad innodb aan of er moeten grote teksten opgeslagen worden, dan Myisam. Ik heb altijd gewerkt met Myisam, overstappen maakt dit nog verschil uit qua programmeren o.i.d.?
EDIT2:
Bingo! De stappen gevolgd zoals op PFZ, werkt top! Blijft mijn vraag uit de vorige edit over...
Ik laat weer van me horen.
EDIT:
Ga ik gelijk over naar een volgende vraag, wat research gedaan naar InnoDB vs Myisam. Iedereen raad innodb aan of er moeten grote teksten opgeslagen worden, dan Myisam. Ik heb altijd gewerkt met Myisam, overstappen maakt dit nog verschil uit qua programmeren o.i.d.?
EDIT2:
Bingo! De stappen gevolgd zoals op PFZ, werkt top! Blijft mijn vraag uit de vorige edit over...
Gewijzigd op 23/12/2010 20:12:57 door Roy D



