ÆØÅ fra MySQL ser forkert ude

Tags:    encoding mysql

Hej UV´er

Jeg har lidt problemer med at få specialtegn som é, ØÆÅ osv til at fungere når jeg skriver til en database.

De bliver gemt som: Høyer, i stedet for Høyer fx, og Ferré i stedet for ferré.

Charset på hjemmesiden er :

Fold kodeboks ind/udHTML kode 


Jeg har prøvet med forskellige indstillinger i MySQL delen, men har altså ikke formået at finde en løsning.

Er der nogen der ved hvordan dette skal løses?



34 svar postet i denne tråd vises herunder
10 indlæg har modtaget i alt 55 karma
Sorter efter stemmer Sorter efter dato
Henriks svar :

1) Tilføje UTF-8 enkodnings headeren til din html kode.
Fold kodeboks ind/udHTML kode 


2) Sende en UTF-8 header fra PHP
Fold kodeboks ind/udPHP kode 


3) Huske at gemme dine filer som UTF-8. Dette gøres ved fx. at åbne filen i notesblok, og så vælge "gem som" og sætte "Kodning" til UTF-8.


4) Hvis du bruger en database til at gemme dine ting i, så skal mysql linket sættes til UTF-8.
Fold kodeboks ind/udPHP kode 

</Henrik>

Det første er at få dine tegn gemt rigtigt i databasen, ved at gøre som Henrik foreslår, altså et konsistent valg af encoding hele vejen igennem. Når det fungerer kan du konvertere de forkerte tegn i databasen med en funktion som f.eks.

Fold kodeboks ind/udPHP kode 


med SELECT og UPDATE på de enkelte felter.




Indlæg senest redigeret d. 03.06.2011 07:59 af Bruger #3173
Nu skal jeg passe lidt på, har aldrig prøvet søgefunktionen herinde før så ved ikke hvor god den er. Men jeg har i hvert fald lige besvaret det spørgsmål der for et par dage siden, så det ville være fedt hvis folk gad søge først :)


Kig her, svar nummer to:

http://www.udvikleren.dk/forum/34493/ae,oe-og-aa-/



----
Udvidelse, så gik det op for mig at det ikke er helt de samme. Men du kan prøve de ting jeg har nævnt i den post der. Derudover skal din database sættes til at være UTF-8 som vidst gøres ganske let under oprettelsen fra fx PHPMyAdmin



Indlæg senest redigeret d. 02.06.2011 20:06 af Bruger #14381
Du behøver ikke bruge UTF-8.

Hvis du beholder din
<meta charset=ISO-8859-1>

Skal du bare også have en
mysqli_set_charset('latin1');

Et par andre ting du skal være opmærksom på:
* Sørg for at din MySQL-database er mindst version 5. MySQL 4 kan slet ikke finde ud af ikke-amerikanske tegn.
* Brug PHP-biblioteket mysqli_* eller PDO::mysql. Det oprindelige mysql_* bibliotek kan ikke finde ud af ikke-amerikanske tegn, fordi det er optimeret til MySQL 4 og ældre.
* Sørg for at kolonnetyperne er text- eller char-baserede typer, og ikke blob-baserede typer.



Jeg har haft prøvet noget lignende engang før, men alle de data jeg hentede fra databasen og fik vist på min hjemmeside havde Æ, Ø og Å, selvom de i databasen så ud som om at de havde nogle underlige tegn for Æ, Ø og Å.

Så hvis du prøver at hente dine data og viser dem på din hjemmeside, vil de så stadig have specialtegn, eller vil den have konverteret dem tilbage til Æ, Ø og Å? Ved godt det ikke direkte hjælper med at rette dem i databasen, men hvis de vises korrekt på hjemmesiden er det vel altid et plus?



<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1?>

prøv det, hvis det stadig ikke virker så skriv lige igen

/Jacob



Hvis dine tegn ser rigtige ud i databasen, så skal du se på hvilket charset din Database bruger. Derefter skal du ændre dit dokument til at bruge samme charset. Det er sikkert UTF-8



Lige efter linjen hvor du skriver mysqli_connect



Jeg skrev før:
* Brug PHP-biblioteket mysqli_* eller PDO::mysql. Det oprindelige mysql_* bibliotek kan ikke finde ud af ikke-amerikanske tegn, fordi det er optimeret til MySQL 4 og ældre.


Du bruger netop mysql_*, hvilket nogen gange godt kan give problemer med ikke-amerikanske tegn. Jeg vil råde dig til at skifte til mysqli_*

Men ellers kan du starte med at prøve mysql_set_charset i stedet for mysqli_set_charset. (altså uden i'et)

Så vidt jeg ved er det det korrekte sted du har indsat den. Jeg er ikke helt sikker på om den skal før eller efter mysql_select_db.



Indlæg senest redigeret d. 03.06.2011 17:40 af Bruger #3143
Nej, du behøver ikke bruge UTF-8...

Men det er en skide god idé. At bruge ISO er en rimeligt forældet praksis og går imod al sund fornuft i dag :)



Det er ganske enkelt fordi nogle af dine sider bruger UTF-8, mens andre bruger ISO-8859-1, og nogle af de sider der bruger ISO-8859-1 har et UTF-8 BOM på sig, så browseren bliver helt forvirret.

Vælg et af de to. Vælg enten UTF-8 ellers vælg ISO-8859-1. Lad være med at blande dem sammen. Brug kun en af dem. Når du har valgt hvilken du vil bruge (Jeg vil anbefale UTF-8), så indstil din editor, dit meta tag, og din mysql_set_charset til den og ret derefter ALLE dine filer. Ikke kun CSS-filen. Alle PHP-, HTML-, CSS-, JS- osv.-filer skal rettes igennem når du skifter tegnkodning. Ellers ligger der rester af forskellige tegnkodninger rundt omkring på siden, og det hele rodes rundt i en uoverskuelig suppe.



t