webForumDet fria alternativet

Riktigt svår nöt att knäcka?

PHP

6 svar · 569 visningar · startad av Mungo

Medlem sedan jan. 2000372 inlägg
Frågan#1

Jag sitter och lägger in ett FORM i ett HTML-mail som skickas ut till användare av ett forum jag skrivit. När man får ett mail ska man alltså direkt i mailet kunna svara på ett inlägg i formuläret. Ett klick på "submit" postar sen innehållet till ett PHP-script.

Det hela funkar bra, förutom att svenska tecken blir förvanskade på ett sätt jag inte sett förut. Oavsett om jag använder GET eller POST så blir det förvandlat till detta:

å, ä, ö blir Ã¥, ä, ö

Å, Ä, Ö blir Ã…, Ä, Ö

Har nån sett detta förut och kan hjälpa till med hur man konverterar dessa på nåt vettigt sätt? Tack!

Medlem sedan feb. 20012 412 inlägg
#2

Hade för mig att liknande problem varit uppe innan med å, ä och ö. Hittade vad jag sökte, hoppas det mot förmodan på något sätt kan hjälpa till:

http://www.webforum.nu/showthread.php?s=&threadid=48062

RED: såg sedan att du själv deltagit i den tråden. :r

Medlem sedan juli 20013 378 inlägg
#3

Hmm...
Ser ut som om du får ÅÄÖ osv i Unicode (men jag är inte säker)
Vad händer om du provar utf8-decode ?

Om inte det fungerar så fick jag för mig att base64-decode har med teckenkodning och e-post att göra ;)

Medlem sedan jan. 2000372 inlägg
#4

Japp, du hade rätt! utf8_decode funkade väldigt bra.

MEN: Nu visar det sig att det är som så att det bara är formulär submittade från Mozillas mailklient som ger Unicode-resultat. Så när jag nu kör utf8_decode() på strängen blir det fel om "åäö" kommer in från t.ex. Outlook, som tydligen har nån annan kodning, så då blir "åäö" till "???"... :)

Finns det nåt sätt att kolla i en sträng om den är unicode?

Medlem sedan juli 20013 378 inlägg
#5

Hmm...
Borde finnas med en "encoding"-parameter i http-request:en när informationen överförs (fast jag kommer inte ihåg vad den heter på rak arm)...
Har inte tid att kolla just nu. Men sök i phpmanualen efter http-request headers eller liknande efter encoding...

Medlem sedan juli 20013 378 inlägg
#6

Nu har jag kollat...

Den http-header jag for efter (HTTP_ACCEPT_CHARSET) ger inte mycket info om det inskickade datat eftersom MSIE6 inte verkar skicka den alls, och Moz1.1 skickar den med ett värde som betyder att den hanterar både ISO-8859-1 och UTF-8 och att det kvittar den vilken (UTF-8 är Unicode).

Däremot klickade det till i skallen och jag kom ihåg att man faktiskt kan tala om i <form>-taggen vilken teckenkodning man vill ha med attributet accept-charset som

specifies the list of character encodings for input data that is accepted by the server processing this form

Fast det är ju en annan femma om det sedan verkligen fungerar förståss ;)

Fixar

<form action="post" method="..." accept-charset="ISO-8859-1">

ditt problem?

(OBS att charsets (UTF-8, ISO-8859-1 osv) skall skrivas med stora bokstäver, även om du använder xhtml !!)

Medlem sedan jan. 2000372 inlägg
#7

Jag lyckades faktiskt hitta en funktion som kollar vilken encoding en sträng innehåller, den heter mb_detect_encoding() och såhär kunde jag använda den:

/* "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */
if (mb_detect_encoding($name, "auto") == "UTF-8") $name = utf8_decode($name);
251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)