Avatar billede askalot Mester
24. november 2020 - 13:58 Der er 7 kommentarer og
1 løsning

Problemer med charset php/mysql

Hej

laver noget php som returnerer json og har et klassisk problem med charset, jeg får output som "title":"Hall\u00f8jP\u00e5Badehotellet"

ø bliver til \u00f8j
og å bliver til \u00e5

Hvad jeg har gjort:

Selve PHP filen er UT8 (har checket i notepad)

i PHP'en har jeg sat:
header('Content-type: application/json; charset=utf-8');

og mine tables er lavet med CHARSET=utf8

$sql = "CREATE TABLE IF NOT EXISTS `" . $tablename ."` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  etc...
  etc...
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";



Hvad mangler jeg?
Avatar billede askalot Mester
24. november 2020 - 14:01 #1
mysqli_character_set_name($conn) returnerer også "utf8"
Avatar billede Jens U. Juniormester
24. november 2020 - 14:18 #2
Det ligner korrekt encoding af JSON. Du kan eftervise det med følgende i browserens debug console:

JSON.parse('{"tekst":"Hall\u00f8j P\u00e5 Badehotellet"}');

som hos mig giver:

tekst: "Halløj På Badehotellet"
Avatar billede askalot Mester
24. november 2020 - 14:26 #3
Okay.. så..du siger at alt er som det skal være? :) Det lyder jo godt.
Så... json er altså ikke designet til at indeholde karakterer som øæå?
Avatar billede askalot Mester
24. november 2020 - 14:27 #4
men..JSON.parse er jo så javascript.. hvad hvis jeg vil konvertere det i PHP?
Avatar billede Jens U. Juniormester
24. november 2020 - 14:31 #5
I PHP spiller det også:

$a = json_decode('{"tekst":"Hall\u00f8j P\u00e5 Badehotellet"}');
print_r ($a);
stdClass Object
(
    [tekst] => Halløj På Badehotellet
)


..men overvej om du reelt har brug for JSON hvis alt sker i maven af PHP.
Avatar billede askalot Mester
24. november 2020 - 14:47 #6
Ok tak.Jo, der skal noget javascript ind over på et tidspunkt, så der er mening med galskaben ;)

Tak
Avatar billede michael_stim Ekspert
24. november 2020 - 16:12 #7
Men i stedet for: header('Content-type: application/json; charset=utf-8');

Så pröv: header('Content-Type: text/plain; charset=utf-8');

Det er jo ikke JSON der skal encodes, men PHP-tekst
Avatar billede michael_stim Ekspert
24. november 2020 - 16:14 #8
Og i din HTML-header: <meta charset="utf-8">
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
Computerworld tilbyder specialiserede kurser i database-management

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