Danske bogstaver æøå

Tags:    php

<< < 12 > >>
Hey folkens...

Jeg har lavet mig et PHP mail script, som benytter PHPs mail(). Men er løbet ind i et problem nu... har ikke lavet så meget PHP før, under min uddannelse har det mere være java og C#.net og noget C++, men det skal jo ikke hindre mig i at forsøge med et nyt sprog og en mulig ny syntax...

Mit problem er i bund og grund, at når jeg afsender $besked i min mail(), så vises mailen med ?? istedet for æ, ø eller å. Har prøvet at forstå hvorfor, og endda prøvet mig frem med en $besked = str_replace("æ", 'æ', $besked); men det har bare ikke fungeret.... Den har slet ikke lavet en replace.... Koden er som følger:

$modtager = "mig@mail.dk";
$subject = "Ny email";
$headers = "Content-Type: text/plain; charset=UTF-8" . "\n";
$headers .= "From: " . $_POST['email'] . "\n";
$besked = "Test med æøå";

mail($modtager, $subject, $besked, $headers);

I den email jeg modtager står alt som det skal (From er ok og det hele), men istedet for "Test med æøå" vil der står:
"Test med ??????"......

Nogen som har en ide? Har prøvet at ændre headeren fra utf-8 til iso standard og tilbage igen... Har prøvet at bruge str_replace uden at den fandt og replaced noget som helst... Og når jeg kigger i mine gamle PHP hæfter lader det til at man sagtens kan echo "æøå"!!!! GRR!!! Hilfe bitte....

Glemte af sige at PHP scriptet ligger på en .php for sig selv, og front-end er end HTML form som har sendemail.php i sin action. Så $besked kommer fra index.html til sendemail.php via $_POST['besked'];



Indlæg senest redigeret d. 17.09.2010 14:24 af Bruger #16130
11 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Kan du ikke bruge htmlspecialchars() til at lave variablen om inden du sender det?

$besked = htmlspecialchars('test med æøå');



Micahel, er du sikker på at Eclipse gemmer php filen i utf-8 format? For jeg har taget den kode jeg har skrevet i mit tidligere indlæg og copy/pastet ind i et php dokument som er gemt som utf-8 format og sendt en besked til netop g-mail, som viser beskeden korrekt.

Edit: Det er ikke nok, at headeren er korrekt, hvis tegnene ikke er. Hvis et dokument bliver gemt som iso-8859-1 (standart for f.eks. notepad), og de afsendes som utf-8, vil browseren ikke vise æøå. Hvis du udskriver dem til browseren med print eller echo, vil browseren vise dem, med mindre meta charset er sat til f.eks. utf-8.

Prøv at tilføje:

Fold kodeboks ind/udHTML kode 


Mit gæt er at filen bliver gemt i et andet format end utf-8 og derfor ikke længere vil udskrive æøå, men ???. Det er helt sikkert her problemet er.

Det er ikke nok at forklare browseren eller mail programmet, hvilket charset vi ved, at tegnende findes i - de skal vide hvilket charset filen er gemt med. I øvrigt en børnesygdom i flash, hvorfor man førhen så mange danske flash applikationer uden æøå :)



Indlæg senest redigeret d. 19.09.2010 14:36 af Bruger #7662
prøv at ændre

Fold kodeboks ind/udPHP kode 


til

Fold kodeboks ind/udPHP kode 




prøv at ændre

Fold kodeboks ind/udPHP kode 


til

Fold kodeboks ind/udPHP kode 


Har prøvet det allerede, prøvede dog lige igen for en sikkerhedsskyld. Men nej, lykkedes stadig ikke.... Ved ikke om det er noget apache skal sættes op til? istedet for æ kom der ?? i Morzilla Thunderbird.



Forresten, hvilken texteditor bruger du??

Hvis du bruger følgende:

Fold kodeboks ind/udPHP kode 


Så burde det virke, hvis dit document er skrevet og gemt i utf-8. Hvis den gemmes i et andet format, vil æøå blive til tegn, når du afsender.

Edit: Har lige prøvet og det virker, når php filen er gemt som utf-8 :)



Indlæg senest redigeret d. 18.09.2010 01:03 af Bruger #7662
Forresten, hvilken texteditor bruger du??

Hvis du bruger følgende:

Fold kodeboks ind/udPHP kode 


Så burde det virke, hvis dit document er skrevet og gemt i utf-8. Hvis den gemmes i et andet format, vil æøå blive til tegn, når du afsender.

Edit: Har lige prøvet og det virker, når php filen er gemt som utf-8 :)


Bruger Eclipse til at lave min PHP sider i. Har udskrevet $besked med echo, og den viser korrekt nok æøå, så jeg ved at det virker hele vejen fra min front-end og til php back-end'en som skal afsende email adresse... Men hverken i Morzilla TB eller på Gmail, er den modtager med æøå (vises som ?? tegn).... Irriterer mig grænseløst, for det BØR vel virke med den korrekte header i utf-8 format?


@Tim:
Har jeg ikke prøvet endnu.. Kan lige prøve den på mandag når jeg er tilbage på pinden :)



Indlæg senest redigeret d. 19.09.2010 00:34 af Bruger #16130
Micahel, er du sikker på at Eclipse gemmer php filen i utf-8 format? For jeg har taget den kode jeg har skrevet i mit tidligere indlæg og copy/pastet ind i et php dokument som er gemt som utf-8 format og sendt en besked til netop g-mail, som viser beskeden korrekt.

Edit: Det er ikke nok, at headeren er korrekt, hvis tegnene ikke er. Hvis et dokument bliver gemt som iso-8859-1 (standart for f.eks. notepad), og de afsendes som utf-8, vil browseren ikke vise æøå. Hvis du udskriver dem til browseren med print eller echo, vil browseren vise dem, med mindre meta charset er sat til f.eks. utf-8.

Prøv at tilføje:

Fold kodeboks ind/udHTML kode 


Mit gæt er at filen bliver gemt i et andet format end utf-8 og derfor ikke længere vil udskrive æøå, men ???. Det er helt sikkert her problemet er.

Det er ikke nok at forklare browseren eller mail programmet, hvilket charset vi ved, at tegnende findes i - de skal vide hvilket charset filen er gemt med. I øvrigt en børnesygdom i flash, hvorfor man førhen så mange danske flash applikationer uden æøå :)


Hmm... Bliver mere og mere mystisk. Giver god mening det med at dokumentet skal gemmes som utf-8, så derfor copy&pastede jeg PHP koden fra Eclipse, og indsatte den i notepad editor, og gemte den som utf-8 format. Uploadede det til min localhost, men resultatet har ikke ændret sig. Modtager stadig email med ?? tegn.

Har lavet en
Fold kodeboks ind/udKode 


og $vejnavn er en del af $besked som er den endelige tekst body som bliver sendt med mail(). Og resultatet af det echo er:
Fold kodeboks ind/udKode 


så jeg vil altså stadig vove påstå at php filen som jo er server-side fint kan rende danske karakter æøå, men det er stadig omkring mail() eller noget at problemet ligger...


Nogle flere ideer? Er fuldstændig vildledt, aner ikke hvad problemet kan være, men det er et kæmpe irritationsmoment. Kan det være Apache eller php5 som jeg mangler at sætte til at understøtte det?


EDIT:
Har lige fundet noget andet interessant fra den mail jeg har modtaget. Der står følgende:
Fold kodeboks ind/udKode 


xxxx'erne er nogle jeg har sat ind for at slører, bare så der ikke opstår forvirring :)



Indlæg senest redigeret d. 20.09.2010 12:56 af Bruger #16130
Prøv at tilføje

Fold kodeboks ind/udPHP kode 


øverst i dit dokument...

Læs her, hvordan du opsætter apache's default charset:

http://httpd.apache.org/docs/2.0/mod/core.html#adddefaultcharset



Prøv at tilføje

Fold kodeboks ind/udPHP kode 


øverst i dit dokument...

Læs her, hvordan du opsætter apache's default charset:

http://httpd.apache.org/docs/2.0/mod/core.html#adddefaultcharset


Hmm.. Jeg tror muligvis der hersker lidt tvivl om hvordan sitet er opbygget. Jeg prøver lige igen at uddybe opbygningen:
Front-end er index.html hvor der er en form som har PHP side som action script.
Back-end er sendtilmelding.php som er PURE php, kun med <?php some code ?>

Når der trykkes på submit, sender den textbox fields med POST over til sendtilmelding.php, som sætter alle POST fields ind i nogle variabler, som ender med at skyde $besked afsted i en mail() funktion.

Det lader til at æøå modtages fint over på .php scriptet, fordi jeg kan godt lave en echo kommando med $besked som udskriver æøå fra $besked på en html side.

Så, derfor er det også lidt svært at smide:
Fold kodeboks ind/udPHP kode 

ind på PHP siden, med mindre jeg har misforstået det?

Jeg undersøger lige charset med apache nærmere, kunne jo tyde på at det enten er php5 opsætning, eller apache, eller smtpserveren jeg benytter (sidste mulighed er dog lidt tvivlsom da vi jo allerede kan sende special characters via den smtp.

EDIT:
front-end html sidens header er:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 20.09.2010 14:21 af Bruger #16130
php5 opsætningen er det tvivlsomt, med mindre du har hardcoded at mail() functionen altid skal sendes som f.eks. iso-8859-1.

Tror du har misforstået...

header(); er en function i php, som bl.a. kan sætte charset i php. Så øverst i din back-end php fil tilføjer:

Fold kodeboks ind/udPHP kode 




<< < 12 > >>
t