Versio

Collatie

Overzicht Reageren

Roy D

Roy D

22/12/2010 21:37:06
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?xml version="1.0" encoding="UTF-8"?>


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 ™ &trade; 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
 
PHP hulp

PHP hulp

24/05/2012 06:25:03
Gesponsorde koppelingen:
 
Jelmer rrrr

Jelmer rrrr

23/12/2010 09:38:53
Quote Anchor link
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.
 
Kris Peeters

Kris Peeters

23/12/2010 10:04:53
Quote Anchor link
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.
 
Chris
Beheerder

Chris

23/12/2010 10:08:20
Quote Anchor link
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 :-)
 
John D

John D

23/12/2010 10:09:32
Quote Anchor link
Kris Peeters op 23/12/2010 10:04:53:
Ik zet alles in utf8.
Ik bedoel: je kan beter gaan voor alles of niets.
Ben ik het helemaal mee eens en op het werk gaan we ook met alle applicaties en databases naar UTF8!
 
Jelmer rrrr

Jelmer rrrr

23/12/2010 10:17:35
Quote Anchor link
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
 
Kris Peeters

Kris Peeters

23/12/2010 10:19:46
Quote Anchor link
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.
 
John D

John D

23/12/2010 11:12:11
Quote Anchor link
Jelmer rrrr op 23/12/2010 10:17:35:
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.
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?
 
Kris Peeters

Kris Peeters

23/12/2010 12:11:01
Quote Anchor link
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.
Gewijzigd op 23/12/2010 12:11:40 door Kris Peeters
 
John D

John D

23/12/2010 12:20:54
Quote Anchor link
$length = strlen(utf8_decode($s));
 
Roy D

Roy D

23/12/2010 19:46:31
Quote Anchor link
@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...
Gewijzigd op 23/12/2010 20:12:57 door Roy D
 



Overzicht Reageren

Get Adobe Flash player