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

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