Gå til innhold

Anbefalte innlegg

Dette er muligens mer database-relatert enn PHP pga. MySQL, men poster her fordi det har med web å gjøre. Jeg vet heller ikke om problemet ligger i databasen, PDO eller noe annet.

 

Jeg holder på med en nettside som benytter PHP og MySQL (bruker PDO til å kommunisere med db).

 

Nettsiden er under tidlig utvikling, har nylig lagt til oppdatering av db-funksjoner og oppdaget at jeg har noe kluss i charset.

 

DB:

Database har Default collation "utf-8 - default collation", og jeg har kontrollert at både tabell og kolonner er satt til det samme.

 

HTTP:

Header er satt til charset=utf-8

 

Hvis jeg skriver i f.eks. en input, sender med POST-data og lagrer i DB så vil tegnene vises riktig på nettsiden, men i DB ser det f.eks. slik ut: ÆØÅÆØÅÆØÅ

 

Hvis jeg endrer DB direkte (i Workbench) slik at det står ÆØÅÆØÅ så får jeg �-tegn på nettsiden (mens DB viser riktig).

 

Hvis jeg endrer HTTP-header til iso-8859-1 så forsvinner � og teksten viser riktig på nettsiden.

 

Jeg forstår ikke hvorfor, og om jeg kommer til å kjøre meg i en grøft eller i fremtiden må konvertere masse skit. Hvorfor funker det bare når encodingen ikke samsvarer? Jeg vil ideelt ha UTF-8 på begge.

Endret av Gellyfusk
Lenke til kommentar
Videoannonse
Annonse

En liten oppdatering/klarifisering. Når jeg setter alt til UTF-8 så ser det ut til at nettsiden kan fungere ordentlig, men hvis jeg går i Workbench så vil ikke tegnene vises ordentlig. Dvs. hvis jeg endrer noe i Workbench (skriver æøå) så vil ikke dette vises korrekt på nettsiden.

 

I Workbench må det se slik ut for at nettsida skal vise rett: ÆØÅÆØÅÆØÅ

 

Da funker også innskrevne oppdateringer fra nettsiden (f.eks. post-data).

Endret av Gellyfusk
Lenke til kommentar

Meget detaljert og god post, men det besvarte ikke det jeg egentlig har problemer med akkurat nå.

 

DB og HTTP header er UTF-8. Nettsida funker helt fint, men i Workbench så vises det feil (som om det var latin1/ISO-8859-1, selv om alt er UTF-8). Jeg skulle ønske jeg hadde muligheten til å kunne redigere via Workbench. I tillegg så vet jeg ikke hvorfor det oppstår, og tenker at det sannsynligvis er en grunn som burde fikses.

Endret av Gellyfusk
Lenke til kommentar

"Meget god post" sier du, men du leste ikke gjennom tråden. Det er en tråd som har blitt satt som sticky fordi folk har det med å lage sin egen nye tegnsettproblemtråder hver eneste uke, og alle tror at deres tilfelle er ekstra spesielt.

 

Du må passe på at du også lagrer php-filene som UTF-8, og at UTF-8 er satt i databasen både på databasenivå, tabellnivå og kolonnenivå. Tekst må komme inn i databasen etter at du har satt UTF-8 på databasen, og inn i php-filen etter at du har satt UTF-8 på editoren.

Lenke til kommentar

Har du med PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" ?

 

Fra http://php.net/manual/en/ref.pdo-mysql.php

This is the way to force mysql PDO driver to use UTF-8 for the connection :

$pdo = new PDO(
 'mysql:host=hostname;dbname=defaultDbName',
 'username',
 'password',
 array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

 

Eller det kan hende du må ta utf8_encode() eller utf8_decode() til hjelp.

Lenke til kommentar

"Meget god post" sier du, men du leste ikke gjennom tråden.

Jeg skimmet den, så at det jeg spurte om ikke stod skrevet der. Du har derimot åpenbart ikke lest posten min, for jeg har ikke spurt om det du nevner, og at du tipser meg om ting jeg har skrevet at jeg har kontrollert.

 

Som jeg prøvde å forklare i oppfølgerposten (før noen svarte) så funker tegnsett på nettsida nå, men det er noe rart, fordi hvis jeg kobler meg til databasen i Workbench så vises alt feil. Det vises korrekt på nettsiden. Filene er lagret med UTF-8, header er UTF-8, kommunikasjon mellom PDO og DB funker fint, og DB er satt til UTF-8.

 

Problemet er tilsynelatende at Workbench nå prøver å vise innholdet som ISO-8859-1, men at det er lagret som UTF-8.

 

Har du med PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" ?

Fra http://php.net/manua...f.pdo-mysql.php

This is the way to force mysql PDO driver to use UTF-8 for the connection :

$pdo = new PDO(
 'mysql:host=hostname;dbname=defaultDbName',
 'username',
 'password',
 array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

Eller det kan hende du må ta utf8_encode() eller utf8_decode() til hjelp.

 

Dette ser derimot ut til å løse problemet. Jeg hadde ikke dette med før, men hadde "mysql:host=hostname;dbname=defaultDbName;charset=UTF-8" som det sto alle andre steder. Takk :D

Endret av Gellyfusk
Lenke til kommentar
  • 4 uker senere...

Har du med PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" ?

 

Fra http://php.net/manua...f.pdo-mysql.php

This is the way to force mysql PDO driver to use UTF-8 for the connection :

$pdo = new PDO(
 'mysql:host=hostname;dbname=defaultDbName',
 'username',
 'password',
 array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

 

Eller det kan hende du må ta utf8_encode() eller utf8_decode() til hjelp.

 

hva blir forskjellen i forhold til denne løsningen:

$pdo = new PDO(
 'mysql:host=localhost;dbname='.$db_name,
 $db_user,
 $user_pw
);
$pdo -> exec("SET CHARACTER SET utf8");

nederste linje kontra array-løsningen?

Endret av Yawa
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...