Avatar billede hrole Mester
03. marts 2009 - 21:05 Der er 15 kommentarer og
1 løsning

Tegnsæt problemer med php og mysql

Hej,

MySQL Tegnsæt: UTF-8 Unicode, sammenkøring utf8_danish_ci. <?php mysql_query("SET NAMES 'utf8';"); ?> sat umiddelbart efter der forbindes til databasen og i head <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />. Scriptet:

<?php
$letter = '';
while( $row = mysql_fetch_assoc($Personer) ) {
  if( $letter !== $row['Navn'][0] ) {
    $letter = $row['Navn'][0];
    echo '<br/><br/>' . $letter . '<br/>';
  }
  echo $row['Navn'] . ' ';
}
?>

Udtrækkene fra databasen viser fint æøå, men $letter viser &#65533; når den når til Æ. Hvor er problemet?
Avatar billede hrole Mester
03. marts 2009 - 21:15 #1
i stedet for &#65533; skulle der være en firkant
Avatar billede erikjacobsen Ekspert
03. marts 2009 - 21:19 #2
Problemet er at "Æ" er to bytes i utf-8, men du henter kun een byte ud. Skal du arbejde med fler-byte strenge i PHP, skal du anvende funktionerne i http://php.net/mbstring
Avatar billede hrole Mester
03. marts 2009 - 21:33 #3
ok, jeg er ikke helt med på hvordan det skal bruges
Avatar billede erikjacobsen Ekspert
03. marts 2009 - 21:38 #4
Du kan fx få første tegn med

  $first=mb_substr($row['Navn'],0,1,'UTF-8');
Avatar billede hrole Mester
03. marts 2009 - 21:54 #5
ah, det begynder at ligne noget, men grupperne med ÆØÅ grupperes ens.
Avatar billede erikjacobsen Ekspert
03. marts 2009 - 22:00 #6
Hvad er din kode nu?
Avatar billede hrole Mester
03. marts 2009 - 22:24 #7
<?php
$letter = '';
while( $row = mysql_fetch_assoc($Personer) ) {
  if( $letter !== $row['Navn'][0] ) {
    $letter = $row['Navn'][0];
    echo '<br/><br/>' . $letter . '<br/>';
  }
  echo mb_substr($row['Navn'],0,1,'UTF-8'). ' ';
}
?>
Avatar billede erikjacobsen Ekspert
03. marts 2009 - 22:29 #8
Nåh, nej, det er ikke så smart. Prøv (utestet):

<?php
$letter = '';
while( $row = mysql_fetch_assoc($Personer) ) {
  $first=mb_substr($row['Navn'],0,1,'UTF-8');
  if( $letter !== $first ) {
    $letter = $first;
    echo '<br/><br/>' . $letter . '<br/>';
  }
  echo $row['Navn']. ' ';
}
?>
Avatar billede hrole Mester
03. marts 2009 - 22:37 #9
Men så forsvinder grupperingerne:

A
Anna Amalie

E
Ejner Erik Esmaralda

H
Heidi Hjalmar Hugo

osv.
Avatar billede hrole Mester
03. marts 2009 - 22:38 #10
og visningen bliver:

Anna Amalie Ejner Erik Esmaralda Heidi Hjalmar Hugo osv.
Avatar billede erikjacobsen Ekspert
03. marts 2009 - 22:42 #11
Det er godt nok ikke testet, men det skulle ikke ligefrem ende i det. Vil du vise din kode igen?
Avatar billede hrole Mester
03. marts 2009 - 22:44 #12
sludder. Det virker :) Tak, og jeg antager du ikke øsnker point?
Avatar billede erikjacobsen Ekspert
03. marts 2009 - 22:46 #13
Fint nok. Og nej tak.
Avatar billede hrole Mester
03. marts 2009 - 22:51 #14
sludder-kommentaren var til mit eget indlæg. Mange tak for hjælpen!
Avatar billede erikjacobsen Ekspert
03. marts 2009 - 22:55 #15
Så skal du huske at lægge et svar, og acceptere dit eget svar.
Avatar billede hrole Mester
03. marts 2009 - 23:11 #16
ok, tak, det havde jeg ikke tænkt på
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester