Avatar billede hrole Mester
29. juli 2013 - 20:00 Der er 12 kommentarer og
1 løsning

Problem med forbindelsetegnsæt til mysql

Hej,

Jeg har problemer med visning af æøå ved udtræk fra mysql. Jeg er derfor nu igang med et forsøg på at få løst dette tilbagevendende problem. Jeg har lavet helt skrabet kode:

test.php:

rød æble fløde

<?php

$dbc_k = mysqli_connect('xxx.surf-town.net', 'xxx', 'xxx', 'xxx');

$qry = mysqli_query($dbc_k, "SELECT Noget FROM A WHERE B");

while ($row = mysqli_fetch_array($qry)) {
    echo $row['Noget'].'<br />';
}

?>

Filen er skrevet i Notepad++ og gemmes som UTF-8 uden BOM. Uploades og æøå fra udtrækket vises korrekt, men i teksten "rød æble fløde" vises æøå som æ ø Ã¥.

Tilføjer jeg

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

inden scriptet vises æøå som spørgsmålstegn (jeg bruger FireFox) i udtrækket med korrekt i teksten "rød æble fløde".

Via phpadmin er mysql sat op til:
Servers forbindelsestegnsæt utf8_danish_ci (utf8_general_ci og utf8_unicode_ci er også forsøgt)
Tegnsæt på tabellerne er utf8_danish_ci

Hvor er fejlen og hvordan løser jeg den?
Avatar billede CoreFreddie Nybegynder
30. juli 2013 - 00:48 #1
Har selv prøvet noget lignende, det var godt nok ikke med en database, men istedet med en $_GET. Der hjalp det med utf8_encode(string)

Altså udskift dette:
while ($row = mysqli_fetch_array($qry)) {
    echo $row['Noget'].'<br />';
}
Med dette:
while ($row = mysqli_fetch_array($qry)) {
    echo utf8_encode($row['Noget']).'<br />';
}

og se om det hjælper. Har du forresten også tjekket inputtet i PHPMyAdmin og set om det også bliver vist forkert der? For så er der nok gået noget galt da du satte det ind..
Avatar billede CoreFreddie Nybegynder
30. juli 2013 - 00:50 #2
Arh, pokkers. Forstod det modsat, så det var udtrækket den var galt med - beklager.
Avatar billede arne_v Ekspert
30. juli 2013 - 02:00 #3
Hvilke HTTP headere sendes der fra server?
Avatar billede arne_v Ekspert
30. juli 2013 - 02:01 #4
Hjaelper det at putte en:

header('Content-Type: text/html; charset=UTF-8');

foerst i PHP koden?
Avatar billede hrole Mester
30. juli 2013 - 07:08 #5
arne_v: Hvordan kan jeg se hvilke HTTP header der sendes fra serveren.

header('Content-Type: text/html; charset=UTF-8'); giver samme resultat som <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />: Rød æble fløde vises fint, udtrækket stadig med spørgsmålstegn.
Avatar billede arne_v Ekspert
31. juli 2013 - 05:33 #6
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />:

og:

SET NAMES 'utf-8'

som foerste SQL saetning.
Avatar billede hrole Mester
31. juli 2013 - 15:27 #7
Jeg har nu:

test.php:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

rød æble fløde

<?php

$dbc_k = mysqli_connect('xxx.surf-town.net', 'xxx', 'xxx', 'xxx');
mysqli_query("SET NAMES 'utf-8'");
$qry = mysqli_query($dbc_k, "SELECT Noget FROM A WHERE B");

while ($row = mysqli_fetch_array($qry)) {
    echo $row['Noget'].'<br />';
}

?>

Hvilket stadig ikke giver korrekt udtræk fra mysql. Ændrer jeg charset="iso-8859-1" er udtræk MED æøå, men rød æble fløde vises som rød æble fløde.

Er det ikke mystisk?
Avatar billede arne_v Ekspert
31. juli 2013 - 16:13 #8
mysqli_query("SET NAMES 'utf-8'");

skal vel vaere

mysqli_query($dbc_k, "SET NAMES 'utf-8'");

??
Avatar billede hrole Mester
31. juli 2013 - 16:33 #9
$qry = mysqli_query($dbc_k, SET NAMES 'utf-8'", "SELECT Noget FROM A WHERE B");"

resulterende i

Warning: mysqli_query() expects parameter 3 to be long, string given in xxxxxx

som er den netop omtalte linie
Avatar billede arne_v Ekspert
31. juli 2013 - 16:36 #10
ja

du kan ikke have 2 gange SQL i ene enkelt mysqli_query
Avatar billede hrole Mester
31. juli 2013 - 16:54 #11
$dbc_k = mysqli_connect('xxx.surf-town.net', 'xxx', 'xxx', 'xxx');
$qry_ny = mysqli_query($dbc_k, "SET NAMES 'utf-8'");
$qry = mysqli_query($dbc_k, "SELECT Noget FROM A WHERE B");

giver stadig ikke æøå
Avatar billede hrole Mester
31. juli 2013 - 21:30 #12
Jeg fandt fejlen.

utf8 og ikke utf-8

smid svar arne_v - Mange tak for hjælpen!
Avatar billede arne_v Ekspert
31. juli 2013 - 21:40 #13
ok
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