webForumDet fria alternativet

Problem med åäö vid setlocale

PHPur PHP

13 svar · 3 789 visningar · startad av dude

dudeMedlem sedan aug. 2002386 inlägg
#1

Har en databas och använder följande för att hämta ut datum:

setlocale(LC_ALL, "sv_SE", "sv_SE.utf-8", "sv", "swedish");
 
$startdatum = ucfirst(strftime("%A, %e %B, %Y", strtotime($row['startdatum'])));

Vilket ger resultatet:
S�ndag, 12 december, 2010

I headern har jag följande:

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

Om jag ändrar headern till:

<meta http-equiv="Content-Style-Type" content="text/css">

Så skrivs datumen korrekt ut, men då blir det istället konstiga tecken på å ä ö i data som plockas ut från databasen.

Skulle bli oerhört glad om någon har en bra lösning på detta, har sökt efter svar i timmar utan att få koll på det...

Nate.AMedlem sedan mars 2006296 inlägg
#2

Har du kontrollerat att php-filen också har utf-8 encoding?

dudeMedlem sedan aug. 2002386 inlägg
#3

Hur kontrollerar men det?

Nate.AMedlem sedan mars 2006296 inlägg
#4

Det beror på vad du kodar i för program. I ex. Dreamweaver så hittar du den inställningen under Ändra->Sidegenskaper...->Titel/Kodning > Kodning

Danne VMedlem sedan aug. 20068 090 inlägg
#5

Databasen ska ha "collation utf-8 general (eller swedish)"
php-sidorna ska vara sparade som utf-8 (som Nate föreslår).

dudeMedlem sedan aug. 2002386 inlägg
#6

Hmm... får det inte att fungera, har följande inställningar på databasen:

--Kopierat från phpmyadmin--
MySQL teckenuppsättning: UTF-8 Unicode (utf8)
Kollation för MySQL-uppkoppling: utf8_swedish_ci

I Dreamweaver har jag följande inställningar på mina php-sidor:
Document type (DTD): XHTML 1.0 Transitional
Encoding: Unicode (UTF-8)
Unicode Normalization Form: c (Canonical Decomposition followed by Canonical Composition)

Ändå så blir det fel tecken när å, ä och ö ska skrivas ut. Finns inget sätt att ändra i phpmyadmin på teckenuppsättningen heller. Någon som vet vad det är som spökar?

dudeMedlem sedan aug. 2002386 inlägg
#7

Någon som har en aning om vad som kan vara fel?

Eller kanske vet någon bra länk där man kan läsa mer om å ä ö och olika åtgärder för att lösa problemet?

dudeMedlem sedan aug. 2002386 inlägg
#8

När jag plockar bort htmlentities så blir det rätt. Men det känns ju inte som en jättebra lösning heller, vill ju inte skriva ut någon på webbsidan utan att först kört htmlentities...

Om jag skriver ut tex.
row['namn']
så blir det rätt: Åsa

Om jag skriver ut
htmlentities(row['namn'])
så blir det fel: Ã�sa

OldtimerMedlem sedan juni 201161 inlägg
#9

Vad skulle hända om du bara smackade på utf8_encode() runt din uträkning av startdatum?

dudeMedlem sedan aug. 2002386 inlägg
#10

Oldtimer skrev:

Vad skulle hända om du bara smackade på utf8_encode() runt din uträkning av startdatum?

Det funkar ju helt perfekt! Tack för den!!

Får fortfarande inte rätt på det när jag plockar ut text från databasen och kör htmlentities på den uthämtade datan. Men allt annat funkar ju faktiskt nu, kanske man kan göra någon egen funktion istället för htmlentities som bara förhindrar html-taggar!?

OldtimerMedlem sedan juni 201161 inlägg
#11

htmlentities förutsätter väl att strängen är i ISO-8859-1 om inget annat anges. Och dina strängar från databasen är väl UTF-8? Så du borde väl behöva ange det?
Typ:

htmlentities(row['namn'], ENT_COMPAT, "UTF-8")

eller något sådant.

dudeMedlem sedan aug. 2002386 inlägg
#12

Oldtimer skrev:

htmlentities förutsätter väl att strängen är i ISO-8859-1 om inget annat anges. Och dina strängar från databasen är väl UTF-8? Så du borde väl behöva ange det?
Typ:

htmlentities(row['namn'], ENT_COMPAT, "UTF-8")

eller något sådant.

Än en gång tack så mycket! Funkar strålande nu!

Det enda som fortfarande spökar är när jag skriver: '

Till exempel: O'Brian

Jag skickar det via ett formulär och utan att köra någon som helst funktion på fältet (endast hämta med $_POST) så skrivs det ut: O\'Brian

Det verkar precis som att det är någon inställning på webbhotellet, kan det vara så? På skärmen vill jag ju att det ska stå O'Brian såklart...

Danne VMedlem sedan aug. 20068 090 inlägg
#13

dude skrev:

Än en gång tack så mycket! Funkar strålande nu!

Det enda som fortfarande spökar är när jag skriver: '

Till exempel: O'Brian

Jag skickar det via ett formulär och utan att köra någon som helst funktion på fältet (endast hämta med $_POST) så skrivs det ut: O\'Brian

Det verkar precis som att det är någon inställning på webbhotellet, kan det vara så? På skärmen vill jag ju att det ska stå O'Brian såklart...

Strip slashes:
http://www.google.com/search?client=safari&rls=en&q=php+strip+slashes&ie=UTF-8&oe=UTF-8

dudeMedlem sedan aug. 2002386 inlägg
#14

Tack alla för all hjälp!

Funkar stålande!

133 ms totalt · 3 externa anrop · v20260731065814-full.a2ca460b
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)