Avatar billede Asky Forsker
24. juni 2013 - 13:12 Der er 15 kommentarer og
1 løsning

Tegnsæt i indputfelter

I mine formularer støder jeg på et problem med tegnsæt i indputfelterne.
HTML-delen er kodet i UTF-8 og alt står rigtigt fint med æøå på siderne. Så er der bare det, at det der skrives indputfelterne står med mærkelige tegn, hvis der bruges æøå. Det er sikkert kun et lille problem, men alligevel irriterende.
Avatar billede didakt Nybegynder
24. juni 2013 - 13:15 #1
Er det præudfyldt indhold der fejler eller er det indhold som brugeren skriver? Har du evt. et link?
Avatar billede Asky Forsker
24. juni 2013 - 15:06 #2
Det er det som brugeren/kunden skriver i inputfelterne. fx her
http://www.bibliodan.dk/lystserien/lystserien.php. Formularen sender en mail (ikke til mig!) til firmaet med kundens bestilling og kontaktoplysninger.
Avatar billede didakt Nybegynder
24. juni 2013 - 15:52 #3
Ok, så problemet er når du modtager indholdet i e-mailen? Det er sandsynligvis fordi din e-mail sendes i 7 bit.

Du kan enten løse det ved at køre værdierne gennem f.eks. utf8_decode() inden du sender dem, eller du kan ændre mailen til også at være utf8, ved at medsende en header a la denne:

Content-type: text/plain; charset=UTF-8
Avatar billede Asky Forsker
24. juni 2013 - 19:53 #4
Det har jeg da vist allerede, jeg tjekker det lige.
Hos mig står der følgende som vist er det samme.
<head>
    <meta http-equiv='content-type' content='text/html;  charset=utf-8'/>

Når jeg tester siderne, bruger jeg et andet webhotel og jeg kan konstatere, at det ene webhotel skriver korrekt. . . .men det andet gør ikke!
Avatar billede didakt Nybegynder
24. juni 2013 - 20:07 #5
De fleste e-mail-klienter er rigtigt irriterende at arbejde med og kan godt finde på at bortfiltrere den slags HTML af sikkerhedshensyn, dovenskab, etc.

Bruger du PHP's mail() til at sende mailen med?

I så fald kan du prøve noget a la:

$headers = array();

$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-Type: text/html; charset=utf-8';
$headers[] = 'Content-Transfer-Encoding: 7bit';

mail($to, $subject, $body, implode("\n", $headers));

(Jeg udelader bevidst \r pga. udbredt bug.)
Avatar billede Asky Forsker
24. juni 2013 - 21:24 #6
Nej, webhotellet tvinger mig til at sende via class.phpmailer.php og class.smtp.php med host og kode mm. ellers ryger bestillingerne i spam eller bliver afvist. Det var en hård nød at knække, men nu fungerer det.
Avatar billede didakt Nybegynder
24. juni 2013 - 21:27 #7
Endte du så med at sende som utf-8 eller ændre encoding?
Avatar billede Asky Forsker
24. juni 2013 - 22:35 #8
Selve mail-delen er stadigvæk utf-8.
$body ="<html>
      <head>
    <meta http-equiv='content-type' content='text/html; charset=UTF-8'/>
<style type='text/css'>
#body{
h1 {font-family : Verdana, Tahoma, sans-serif; font-size: 16px ;  text-align : left; color:#000000;}
h2 {font-family : Verdana, Tahoma, sans-serif; font-size 14px; text-align : left;}
h3 {font-family : Verdana, Tahoma, sans-serif; font-size: 12px/1,5 ;X text-align : left; color : #000000;}
h4  {font-family : Verdana, Tahoma, sans-serif; font-size: 10px/1,5 ;  text-align : left; }
p {font-family : Verdana, Tahoma, sans-serif; font-size: 12px/1,3 ;  text-align : left; color :#000000;}
}
</style>
</head>
<body> <h1>Hej $navn, her er din $emne</h1>".osv. . .</body></html>
Avatar billede Asky Forsker
30. juni 2013 - 09:40 #9
Det viser sig at problemet for det meste kun er der i echo-meddelelsen:
echo "<h3> Formularen er blevet sendt med disse oplysninger: <br/> Navn:  ".$navn." ".$adresse." ".$postnummer." ".$by."<br/> E-mail: ".$email."  Emne: ".$emne."<br/>
    om kort tid modtager du en e-mail med din bestilling</h3>";
Kan jeg formattere den med UTF-8?
Avatar billede didakt Nybegynder
30. juni 2013 - 12:24 #10
Det mest optimale ville være at du undersøgte om din server sender en UTF-8 header som default og at alle dine tekstfiler (php, html, css, js, osv.) er encoded i UTF-8.

Hvis det er tilfældet, skal du meget sjældent bekymre dig om encoding overhovedet, medmindre du henter og læser ekstern data.

Hvis det er en Apache-server du sidder på, kan du tilføje følgende linie i din .htaccess-fil, for at sende en UTF-8 header:

AddDefaultCharset utf-8

Nu ved jeg ikke hvilken teksteditor du bruger, men der burde være en slags "egenskaber", "encoding" eller "formatering" hvor du kan konvertere dine filer til "utf-8 without BOM (byte order mark)".

Hvis du ikke gider gå det igennem fra bunden og det bare skal virke nu og her, så prøv noget lignende dette:

$s = 'Din tekst';

if(!mb_detect_encoding($s, 'utf-8', true)) {
  $s = mb_convert_encoding($s, 'utf-8', 'iso-8859-1');
}

echo $s;
Avatar billede Asky Forsker
30. juni 2013 - 13:39 #11
Jeg bruger Notepad++ for det meste. Før brugte jeg dreamweaver MX 2004.
For et par år siden skrev jeg alle mine filer om til UTF-8(uden BOM), så de er testet alle sammen.
det webhotel, vi bruger er tdc Webmore og så vidt jeg ved er det en Apache-server.
Jeg vil afprøve din ide.
Avatar billede Asky Forsker
30. juni 2013 - 23:14 #12
Nu har jeg afprøvet din ide. Der kommer ingen fejlmeddelelser, men til gengæld er æøå i echo-meddelelsen stadigvæk i forkert tegnsæt.
Avatar billede Asky Forsker
01. juli 2013 - 13:12 #13
Jeg prøver lige at uddybe problemet.
Før skrev jeg php-koden sammen med html-delen. Nu har jeg separeret formularen i en formularfil(html) og en responsefil(PHP).
Det har rigtig mange fordele. Men dog denne ene fejl:
Da jeg havde det hele samlet var echo-meddelelsen, der fortæller brugeren at formularen er sendt, i dansk tegnsæt (UTF-8 som resten af formularen).
Når den nu sendes fra responsefilen er den i et tegnsæt, der ikke kan vise æø og å. Jeg har afprøvet det på to forskellige webhoteller med samme resultat.
Avatar billede Asky Forsker
01. juli 2013 - 13:22 #14
Somme tider skal man lige prøve at formulere problemet - og så dukker løsningen op imens man formulerer problemet.
jeg indsatte følgende header øverst i formular(PHP)delen
header('Content-type: text/html; charset=utf-8');

Og så blev problemet løst!

men jeg vil ikke give mig selv point, så hvis didakt vil give lyd, så får du pointene for din interesse. :-)
Avatar billede didakt Nybegynder
01. juli 2013 - 15:10 #15
Jeg var også ved at løbe tør for "blindforslag". Med den løsning du valgte, burde det også have fungeret med .htaccess eller ved at konvertere outputtet til iso, medmindre du inkluderer et eller andet som sætter en header eller ændrer nogle settings.

Nå anyways, det vigtigste er jo at det virker for dig.
Avatar billede Asky Forsker
01. juli 2013 - 20:56 #16
Ja, løsningen var jo næsten for simpel. Måske skal din kode med .htaccess placeres et andet sted, end der, hvor jeg satte den.
Tak for din interesse for problemet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester