webForumDet fria alternativet

Problem med åäö vid setlocale

PHP

13 svar · 3 791 visningar · startad av dude

Medlem sedan aug. 2002386 inlägg
Frågan#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...

Medlem sedan mars 2006296 inlägg
#2

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

Medlem sedan aug. 2002386 inlägg
#3

Hur kontrollerar men det?

Medlem 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

Medlem 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).

Medlem 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?

Medlem 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?

Medlem 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

Medlem sedan juni 201161 inlägg
#9

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

Medlem 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!?

Medlem 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.

Medlem 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...

Medlem 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

Medlem sedan aug. 2002386 inlägg
#14

Tack alla för all hjälp!

Funkar stålande!

261 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)