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!
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?
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...
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 ;)
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);
264 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25