Avatar billede naquer Nybegynder
16. juni 2011 - 21:51 Der er 20 kommentarer og
1 løsning

Problemer med Æ, Ø og Å

Hej,

Hver gang Æ, Ø eller Å indgår i noget tekst som er processeret gennem PHP, fremstår det med et mærkeligt tegn.

Jeg har prøvet at tilføje følgende til <head>, men det har ikke hjulpet:


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da" lang="da">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">


Har I noget bud på hvad jeg gør galt?

Mvh.
Avatar billede rofistick Nybegynder
16. juni 2011 - 22:00 #1
Du kan starte med at prøve at bruge denne
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

Udover det kan du hvis teksten er skrevet i en tredjeparts-fil, som f.eks. en seperat javascript fil, bruge nogle encodes, dem kan du finde for alle speciale tegn rundt omkring på nettet.

Det burde løse dit problem.
Avatar billede keysersoze Guru
16. juni 2011 - 22:06 #2
sørg for at benytte samme content-type overalt - i meta, i en evt database, når du gemmer filen, når filen sendes fra serveren...

se fx http://www.web-dev.dk/post/Korrekt-visning-af-specielle-karakterer-character-encoding.aspx
Avatar billede naquer Nybegynder
18. juni 2011 - 13:50 #3
Har prøvet alt ovenstående, og har nu fundet frem til at det udelukkende er data der bliver trukket ud af MySql der bliver vist med mærkeligt tegn i stedet for ÆØÅ.

Jeg har prøvet at ændre database collation og collation på de enkelte kolonner til UFT_8 danish, men tabellen summerer stadig op til latin1_swedish_ci.

Har I noget bud på hvad jeg ellers kan gøre for at løse problemet?
Avatar billede rofistick Nybegynder
18. juni 2011 - 14:22 #4
Du skal når du smider en streng op i databasen, inden da Encode strengen, og når du hiver det ud fra databasen, decode.
Avatar billede naquer Nybegynder
18. juni 2011 - 14:47 #5
Tak for svaret.

Kan du give mig et eksempel på hvordan jeg konkret skal encode strengen når den smides op og decode den når den hives ud?
Avatar billede rofistick Nybegynder
18. juni 2011 - 14:53 #6
Det gør jo an på hvilket sprog du bruger, så jeg tror du skal google dig frem til det.
Avatar billede keysersoze Guru
18. juni 2011 - 16:04 #7
at encode og decode tekst lyder som en dårlig idé - men bør holde sig fra at manipulere med brugerinput inden det kommer i databasen.

Jeg kender ikke så meget til MySQL, men collation styrer fx sortering og ikke tegnsæt - du bør kunne specifikt sætte tegnsæt på databasen (skifter du fra et tegnsæt til et andet vil de "gamle" data næppe blive formatteret efter ændringen).
Avatar billede naquer Nybegynder
20. juni 2011 - 09:12 #8
Jeg har fundet frem til at følgende kode efter hver MYSQL connection løser problemet:


mysql_query("SET NAMES 'utf8'");    


Kan dog næppe forestille mig det er den optimale løsning. Måske ovenstående kan hjælpe med at forklare hvor problemet opstår?
Avatar billede keysersoze Guru
20. juni 2011 - 09:29 #9
set names tvinger den enkelte connection til at køre på det bestemte tegnsæt - så at det virker når du har sat den på betyder med stor sandsynlighed at du netop ikke har sørget for at databasen kører på utf-8 tegnsæt.
Avatar billede naquer Nybegynder
23. juni 2011 - 17:08 #10
Er kommet en smule videre med problemstillingen.

Når jeg fjerner <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> fra headeren og ændrer charset på alle tabeller i databasen, virker Æ, Ø og Å når der hentes fra mysql databasen.

Ovenstående ændring medfører imidlertid at det tekst der ikke hentes fra mysql, ikke understøtter dansk tegnsætning. Noget bud på hvad jeg kan gøre for at få det til at virke?
Avatar billede keysersoze Guru
23. juni 2011 - 18:32 #11
Med hvilket charset er din fil gemt - og hvordan, altså med hvilket charset, sendes det fra serveren?
Avatar billede naquer Nybegynder
23. juni 2011 - 19:40 #12
Mine filer er gemt som UFT-8Y formatet (bruger jEdit på en mac computer).

Hvis jeg ændrer formatet til ISO 8859-1 virker æ, ø og å imidlertid på min index.php side, men ikke på de sider der inkluderes, selvom jeg også ændrer formatet der.

Tror du det kan være min editor der forårsager problemet?
Avatar billede naquer Nybegynder
23. juni 2011 - 19:51 #13
Det er gemt med uft-8Y (bruger jEdit som editor på en Mac).
Hvis jeg ændrer det til ISO-8859-1 virker æ, ø og å imidlertid på index.php men ikke de filer der inkluderes (selvom jeg også har ændret charset til ISO-8859 der)
Avatar billede naquer Nybegynder
23. juni 2011 - 19:53 #14
Det kan også være det er charsettet der forårsager at SELECT DISTINCT i mysql ikke virker?

Når jeg f.eks. har en liste med Aarhus, Aalborg, Aarhus, Aarhus og laver en while løkke vises alle værdier. Skriver jeg derimod DISTINCT i SQL sætningen vises kun Aalborg
Avatar billede keysersoze Guru
23. juni 2011 - 20:08 #15
hvordan serverer serveren dokumentet?
Avatar billede naquer Nybegynder
23. juni 2011 - 20:40 #16
mysql connection collation i forsiden af phpMyadmin er sat til UTF_8_danish_ci

mysql_charset er på forsiden sat til UTF Unicode

tabellerne og tekstfelterne i tabellerne er sat til utf8_danish_ci

Håber det er svar nok
Avatar billede naquer Nybegynder
23. juni 2011 - 20:44 #17
Det underlige er at så snart jeg fjerner     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
fra headeren virker Æ, Ø og Å mange steder på siden (dog ikke det der ikke hentes fra mysql)
Avatar billede keysersoze Guru
23. juni 2011 - 21:42 #18
det var ikke svar nok - det jeg søger er information om hvordan serveren sender dokumentet. Hvis du ikke ved det, eller hvis du vil ændre det, er jeg ret sikker på at du kan styre det gennem htaccess.
Avatar billede naquer Nybegynder
23. juni 2011 - 21:58 #19
I htaccess har jeg tilføjet dette:

AddDefaultCharset UTF-8
Avatar billede naquer Nybegynder
23. juni 2011 - 22:28 #20
Findes der en anden måde at omgå det på? Kan man evt. replace æ, ø og å og lave en function eller lign?

Kan simpelthen ikke komme til bunds i det her
Avatar billede keysersoze Guru
25. juni 2011 - 10:19 #21
du kan sagtens benytte html-entiteter fremfor fx æøå - men det vil i bund og grund bare skjule et dybereliggende problem, der kan give problemer på et senere tidspunkt. Jeg kan desværre ikke påpege hvor det går galt, dog lyder det som om filen ikke er gemt korrekt, så her udefra har jeg ikke rigtig flere bud.
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