Mial formullär utan ÅÄÖ problem

Permalänk

Mial formullär utan ÅÄÖ problem

Hej

Jag har skapat ett mail formulär. Se kod nedan:
Minns att man kunde infoga kod på ett mer lättläst sätt, men hittar ej det?

Formuläret fungerar men Å Ä Ö hanteras fel så jag använder mig av:
$iso??? = iconv("UTF-8", "ISO-8859-1", $???); = isoövers

???=variabel och dess input av mig som översätts till mer lättläst Å Ä Ö. alla isoövers måste inkluderas i funktionen "mail" vilket bara kan hantera max 5 parameters jag behöver hantera upp till 7 st!

Jag måste alltså hantera dessa 7 i antingen 1 variabel, tveksam då jag läst att variabel kan bara hantera ett värde?

Mvh Fredrik

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem

Nu får vi backa ett par steg här. Först och främst; vilket/vilka språk bygger ditt formulär på?
Sen hade det varit bra med koden också, kan tyvärr inte se den

Permalänk
Skrivet av Zakire:

Nu får vi backa ett par steg här. Först och främst; vilket/vilka språk bygger ditt formulär på?
Sen hade det varit bra med koden också, kan tyvärr inte se den

Jag undrade rätt tidigt hur man infogar koden till inlägget
"Minns att man kunde infoga kod på ett mer lättläst sätt, men hittar ej det?"

HTML är formuläret uppbyggt av medan PHP behandlar datan, CSS är för formateringen.

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk

PHP Koden

<?php $fnamn = $_POST['fnamn']; $isofnamn = iconv("UTF-8", "ISO-8859-1", $fnamn); $fvomrode = $_POST['fvomrode']; $isofvomrode = iconv("UTF-8", "ISO-8859-1", $fvomrode); $kperson = $_POST['kperson']; $isokperson = iconv("UTF-8", "ISO-8859-1", $kperson); $tfn = $_POST['tfn']; $emailfrom = $_POST['emailfrom']; $behovsalter = $_POST['behovsalter']; $isobehovsalter = iconv("UTF-8", "ISO-8859-1", $behovsalter); $amne = $_POST['amne']; $isoamne = iconv("UTF-8", "ISO-8859-1", $amne); $meddelande = $_POST['meddelande']; $isomeddelande = iconv("UTF-8", "ISO-8859-1", $meddelande); $from = 'From: Hemside meddelande!'; $isofrom = iconv("UTF-8", "ISO-8859-1", $from); $to = 'fredrik.hjarpe@dhshelsingborg.se'; $subject = $_POST['amne']; $isosubject = iconv("UTF-8", "ISO-8859-1", $subject); $spam = $_POST['spam']; //$iso = ("$isofnamn $isofvomrode"); //[$isokperson], [$isobehovsalter], [$isoamne], [$isomeddelande], [$isofrom], [$isosubject]); $body = "From: $fnamn\n Ert angagemang: $fvomrode\n Kontakt person: $kperson\n Telefon: $tfn\n E - Mail: $emailfrom\n Behov av: $behovsalter\n Meddelande:\n $meddelande"; if ($_POST['submit'] && $spam == '4') { if (mail ($to, $subject, $body, $from, $isofnamn, $isofvomrode)) { echo '<p>Ditt meddelande är skickad!</p>'; } else { echo '<p>Någonting gick fel, varsegod och försök igen!</p>'; } } else if ($_POST['submit'] && $spam != '4') { echo '<p>Du besvarade anti-spam frågan fel!</p>'; } ?>

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem

Vilka fel får du med åäö? Definerar du formateringen i html taggen överst på sidan?

Visa signatur

¯\_(Ó.ò)_/¯

Permalänk
Medlem
Skrivet av freddehboy:

<?php
$fnamn = $_POST['fnamn'];
$isofnamn = iconv("UTF-8", "ISO-8859-1", $fnamn);

$fvomrode = $_POST['fvomrode'];
$isofvomrode = iconv("UTF-8", "ISO-8859-1", $fvomrode);

$kperson = $_POST['kperson'];
$isokperson = iconv("UTF-8", "ISO-8859-1", $kperson);

$tfn = $_POST['tfn'];
$emailfrom = $_POST['emailfrom'];

$behovsalter = $_POST['behovsalter'];
$isobehovsalter = iconv("UTF-8", "ISO-8859-1", $behovsalter);

$amne = $_POST['amne'];
$isoamne = iconv("UTF-8", "ISO-8859-1", $amne);

$meddelande = $_POST['meddelande'];
$isomeddelande = iconv("UTF-8", "ISO-8859-1", $meddelande);

$from = 'From: Hemside meddelande!';
$isofrom = iconv("UTF-8", "ISO-8859-1", $from);

$to = 'fredrik.hjarpe@dhshelsingborg.se';

$subject = $_POST['amne'];
$isosubject = iconv("UTF-8", "ISO-8859-1", $subject);

Det skulle vara så mycket enklare om du skickade datan med rätt encoding till att börja med.

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Det jag får om jag inte använder:
$iso???? = iconv("UTF-8", "ISO-8859-1", $????);

Istället för åäö i mail programmet får jag konstiga tecken

Skrivet av Teknocide:

Det skulle vara så mycket enklare om du skickade datan med rätt encoding till att börja med.

Bara jag vet var jag ska definiera encodingen kann jag ta reda på koden?

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk

Jag har fixat det tydligen någon meta tag som stökade till det

Tack för hjälpen oavsett det.

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem
Skrivet av freddehboy:

Jag undrade rätt tidigt hur man infogar koden till inlägget
"Minns att man kunde infoga kod på ett mer lättläst sätt, men hittar ej det?"

HTML är formuläret uppbyggt av medan PHP behandlar datan, CSS är för formateringen.

Aha, jag som inte läste hela

Det enda du ska behöva göra är att specificera charset en gång för HTML och en gång för PHP, sen är det klart. Finns ingen anledning att konvertera vartenda sträng.

Placera följande kodsnuttar i headern:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
header("Content-Type: text/html; charset=utf-8");
?>

Permalänk

Tack för svaret Zakire men jag html exemplet jaag använder la till en meta tag som gjorde att å ä ö inte blev normala. Jag tog bortt koden så nu fungerar tecknen fint :?

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Legendarisk

@freddehboy: Det finns en hel del att tänka på när det kommer till mail, i synnerhet mail() som ställer väldigt höga (och svårupptäckta) krav på dig som användare, och exemplet ovan kan missbrukas av illvilliga användare. För att undvika misstag kan det vara värt att fundera på att använda ett färdigt bibliotek som t.ex. PHPMailer istället.

Skrivet av freddehboy:

Tack för svaret Zakire men jag html exemplet jaag använder la till en meta tag som gjorde att å ä ö inte blev normala. Jag tog bortt koden så nu fungerar tecknen fint :?

<meta> påverkar inte vilken data du faktiskt skickar till webbläsaren, det är bara ett sätt informera om hur datan ska presenteras för användaren. Om du är obekant med teckenkodning så kan det hjälpa att tänka på det som olikfärgade glasögon; med ett par kanske din data är rosa, med ett annat gul, och om man inte kommer överrens om vad som ska användas så kan det hända att man ser olika saker. Utan meta-tagg eller annan information om vilken teckenkodning webbläsaren ska använda kommer webbläsaren försöka gissa istället, och eftersom att det fungerar när du tar bort meta-taggen (som är lägre prioriterad än t.ex. tips i Content-Type (som man bör använda istället för <meta>)) har du antagligen använt en annan kodning i källkodsfilen; det är denna som avgör hur datan i dina statiska strängar ser ut internt, och såvida du inte konverterar dessa innan du skickar uppgifterna till klienten även vad den faktiskt tar emot. Vill du presentera dokumentet som t.ex. UTF-8 bör du se till att alla filer sparas som det med. De flesta editorer har alternativ för det.

<meta> påverkar inte heller hur du skickar dina mail, eller ens vilken data du tar emot, däremot kan det påverka hur (väluppfostrade) webbläsare skickar text till dig via formulär på siten. För att undvika problem bör du alltid verifiera att inkommande data är giltig för den förväntade teckentabellen, du kan göra det med mb_check_encoding().

Teckenkodningen i själva mailet är ett helt annat kapitel, det kan som sagt vara värt att titta på ett färdigt bibliotek för det.

Skrivet av freddehboy:

Minns att man kunde infoga kod på ett mer lättläst sätt, men hittar ej det?

Använd [code] ... [/code]. Du kan se hur andra har formaterat sina inlägg om du citerar.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Zakire:

Aha, jag som inte läste hela

Det enda du ska behöva göra är att specificera charset en gång för HTML och en gång för PHP, sen är det klart. Finns ingen anledning att konvertera vartenda sträng.

Placera följande kodsnuttar i headern:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
header("Content-Type: text/html; charset=utf-8");
?>

Det stämmer inte helt. Med header(...) sätter man en header på ett response, dvs det som skickas från servern tillbaka till klienten. Formuläret skickas som e-post så encodingen måste sättas även där, se http://php.net/manual/en/function.mail.php, parameter $additional_headers.

Att deklarera content-type med meta-taggen är i princip meningslöst om man skickar med headers i responset; faktum är att webbläsare inte bryr sig om meta-taggen om den istället får content type genom en header. Det kan dessutom vara missvisande om det angivna charsetet inte stämmer överens med headern.

Jag gissar på att PHP redan sätter headern 'Content-Type=text/html;charset=utf-8' för alla response som standard — detta är en konfigurationsinställning och bör vara standard i yngre versioner. Med andra ord tror jag inte header("Content-Type: text/html; charset=utf-8"); behövs alls. Skulle PHP ändå vara konfigurerat till att sätta en header med exempelvis ISO-8859-1 är det bättre att ändra det i konfigurationen.

Det som kvarstår är alltså att sätta content type på mejlet och då datan kommer in som UTF-8 ska även mejlet ha denna encoding. Detta stämmer överens med alla iconv i koden, som just omvandlar UTF-8 till ISO-8859-1. Genom att sätta headern på mejlet kommer man inte behöva konvertera om någon data.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Det stämmer inte helt. Med header(...) sätter man en header på ett response, dvs det som skickas från servern tillbaka till klienten. Formuläret skickas som e-post så encodingen måste sättas även där, se http://php.net/manual/en/function.mail.php, parameter $additional_headers.

Att deklarera content-type med meta-taggen är i princip meningslöst om man skickar med headers i responset; faktum är att webbläsare inte bryr sig om meta-taggen om den istället får content type genom en header. Det kan dessutom vara missvisande om det angivna charsetet inte stämmer överens med headern.

Jag gissar på att PHP redan sätter headern 'Content-Type=text/html;charset=utf-8' för alla response som standard — detta är en konfigurationsinställning och bör vara standard i yngre versioner. Med andra ord tror jag inte header("Content-Type: text/html; charset=utf-8"); behövs alls. Skulle PHP ändå vara konfigurerat till att sätta en header med exempelvis ISO-8859-1 är det bättre att ändra det i konfigurationen.

Det som kvarstår är alltså att sätta content type på mejlet och då datan kommer in som UTF-8 ska även mejlet ha denna encoding. Detta stämmer överens med alla iconv i koden, som just omvandlar UTF-8 till ISO-8859-1. Genom att sätta headern på mejlet kommer man inte behöva konvertera om någon data.

Stämmer mycket bra! Jag som inte tänkte hela vägen..
Kikar på mina egna sendmail-funktioner och ser att jag skickar med en charset-parameter där.

Angående att sätta en header i PHP-koden så är jag helt med på hur du menar - det _ska_ inte behövas. Men det är bättre att vara övertydlig IMO. Har själv stött på tecken som blir knasiga där servern är felkonfigurerad, och det är inte alla servrar man har åtkomst att konfigurera om.