zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Formulardaten und UTF-8 ?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 19.09.2005, 20:47
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 19.09.2005
Beiträge: 6
poms befindet sich auf einem aufstrebenden Ast
Standard Formulardaten und UTF-8 ?

Hallo,

ich komme leider alleine nicht weiter - ich versuche Formulardaten zu übertragen und richtig darzustellen (Sonderzeichen), deshalb versuche ich mit UTF-8 zu arbeiten. Mein PHP ist minimalst, aber ich denke (?), das dies hier nicht das Problem ist.

Speichere ich meine Dateien (.html und .php) mit 8-Bit ab ( anstatt mit UTF-8 ) und versehe die HTML-Datei mit <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> gelingt ein "normales" Übertragen der Formulardaten und eine Darstellung (wenigstens) der Umlaute - Ich hätte aber gerne UTF-8

Mein Doctype:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<title>Titel</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
...

#

Encoding:
Ich speichere die .html mit encoding UTF-8 mit Scite. (kein UTF-8 Cookie)

Versuch a) Ich speichere die .php mit encoding UTF-8 mit Scite (kein UTF-8 Cookie)
Formulardaten werden nicht übertragen, das verstehe ich überhaupt nicht!

Versuch b) Ich speichere die .php mit dem encoding 8-Bit mit Scite
Formulardaten werden übertragen:
Richtige Ausgabe der Sonderzeichen klappt aber nicht… nicht einmal Umlaute? Müssten diese nicht mit 8-Bit dargestellt werden?

#

Testeintrag in ein Formularfeld:

Sonderzeichentest
ä, ö, ü, ß, &,
Ä, Ü, Ö,
€, @

Formulardatenausgabe (Outlook Express und GMX):

Von: tester
Email: test@test.de
Betreff: UTF-8 Probleme
Nachricht:
Sonderzeichentest
ä, Ã, ü, ß, &,
Ä, Ü, Ö,
â‚, @

#

Tipps sind Willkommen! Vielleicht fällt ja jemand sofort mein kapitaler Fehler auf?!

Danke
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 19.09.2005, 21:00
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 02.06.2003
Beiträge: 2.441
ulle befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
<?php
// charset muss entsprechend ==> htmlentities($arg_str,ENT_QUOTES,'UTF-8');
$str_charset 'utf-8';

// WICHTIG: XHTML 1.0 verlangt Content-type: application/xhtml+xml
// Content-Type entsprechend UA/CLIENT was akzeptiert; siehe $_SERVER['HTTP_ACCEPT']
// IE (dummer Browser) => text/html
$str_ContentType 'text/html';

header('Content-type: .'$str_ContentType'.; charset='.$str_charset);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
:
:
<meta http-equiv="Content-Type" content="=<?php echo $str_ContentType ?>; charset=<?php echo $str_charset ?>" />
:
:
:
<form action="<?php $_SERVER["PHP_SELF"]?>" method="post" accept-charset="<?php echo $str_charset ?>">
:
:
?>
Ohne mich weiter mit den vorhergehenden Postings zu beschäftigen, wie gezeigt funktioniert es bei mir. Allerdings sind meine scripts.php - Dateien, und alles andere auch - besonders die Ausgabe-Dateien, alle in UTF-8 gespeichert.
__________________
</ulle>
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 20.09.2005, 10:21
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 19.07.2005
Beiträge: 211
Cyberman befindet sich auf einem aufstrebenden Ast
Standard

Was ist "8Bit" und inwiefern unterscheidet es sich von UTF-8? UTF-8 ist auch 8Bit-basierend. Daher der Name.

Was ist ein "UTF-8-Cookie"? UTF-8 ist ein Zeichensatz, der kann unmöglich ein Cookie haben. Meinst du ev. das Byte-Order-Mark(BOM)?

Was sendet der Server? Ev. ist er auf Latin-1(ISO 8859-1) eingestellt?
Mit Zitat antworten
  #4 (permalink)  
Alt 20.09.2005, 11:17
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.953
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Als erstes muss deine PHP-Datei natürlich UTF-8 kodiert gespeichert sein. Dann musst du wie Ulle schon geschrieben hat, die Zeichensatzkodierung auch im HTTP-Header senden.

Im FORM-Element solltest du noch das Attribut accept-charset="UTF-8" mit angeben. Allerdings gibt es wohl bei einigen Browser Probleme damit. Teste es damit einfach mal. Wenn du merkst, dass es nicht überall funktioniert, musst du ein wenig tricksen. Dazu packst du ein HIDDEN-Feld mit bspw. einem 'ö' in dein Formular. Nach dem Absenden überprüfts du in deinem Script, ob das 'ö' auch UTF-8 kodiert ist. Wenn nicht, sind deine Formulardaten wahrscheinlich ISO-8859-1 kodiert und du musst sie alle erst noch mit utf8_encode() konvertierten.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #5 (permalink)  
Alt 20.09.2005, 11:25
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 06.01.2005
Beiträge: 151
derdiedas befindet sich auf einem aufstrebenden Ast
Standard

//gelöscht
Mit Zitat antworten
  #6 (permalink)  
Alt 20.09.2005, 11:50
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 19.09.2005
Beiträge: 6
poms befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Als erstes muss deine PHP-Datei natürlich UTF-8 kodiert gespeichert sein.
hab ich mit UTF-8 encodiert (Scite)
Zitat:
Dann musst du wie Ulle schon geschrieben hat, die Zeichensatzkodierung auch im HTTP-Header senden.
Habe ich gestern Nacht mit Ulles Code probiert... wollte nicht gehen. Mag an meiner Müdigkeit und meinen schlechten PHP-Kenntnissen gelegen haben... Danke an Ulle für das Beispiel.
Zitat:
...
Wenn nicht, sind deine Formulardaten wahrscheinlich ISO-8859-1 kodiert und du musst sie alle erst noch mit utf8_encode() konvertierten.
Das verstehe ich jetzt nicht, ich habe doch die Datei die die Formdaten enthält mit UTF-8 encodiert... und wie soll das mit utf8_encode funktionieren. Ein Codesnippet wäre hilfreich.

@cyberman
Wie kann ich denn herausfinden wie "mein" Server encodiert ist? Ich habe ein sogenannten Business 5.0 Packet bei 1&1 (PHP4.3 und 1 MySQL DB)
Mit Zitat antworten
  #7 (permalink)  
Alt 20.09.2005, 11:56
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.953
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von poms
Zitat:
...
Wenn nicht, sind deine Formulardaten wahrscheinlich ISO-8859-1 kodiert und du musst sie alle erst noch mit utf8_encode() konvertierten.
Das verstehe ich jetzt nicht, ich habe doch die Datei die die Formdaten enthält mit UTF-8 encodiert... und wie soll das mit utf8_encode funktionieren. Ein Codesnippet wäre hilfreich.
Die Formulardaten sendet dir der Browser zurück und wenn der deinen Wunsch nach UTF-8 kodierten Daten nicht versteht, musst du halt selbst Hand anlegen. Aktuelle Browser wie Firefox oder Opera können das aber und solange das damit noch nicht funktioniert, brauchst du dich um die Sonderfälle auch nicht zu kümmern.

Zitat:
Zitat von poms
Wie kann ich denn herausfinden wie "mein" Server encodiert ist?
Wie dein Server "encodiert" ist, kann dir nur dein Hoster sagen. Wie deine Seiten ausgeliefert werden, sagt dir dein Browser oder du schaust es dir mit Web-Sniffer an.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #8 (permalink)  
Alt 20.09.2005, 11:59
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 02.06.2003
Beiträge: 2.441
ulle befindet sich auf einem aufstrebenden Ast
Standard

Dieser Code muß nicht als UTF-8 gespeichert werden. Die Ausgabe ist trotzdem UTF-8. Sichtbar an der Byte-Länge!

Einfach mal kopieren und probieren.
Code:
<?
// charset muss entsprechend ==> htmlentities($arg_str,ENT_QUOTES,'UTF-8');
//$str_charset = 'iso-8859-1';
$str_charset = 'utf-8';

header('Content-type: text/html; charset='.$str_charset);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $str_charset?>" />
<title>test</title>
<style type="text/css">	<!--
	html,body	{
		padding: 0px;
		margin: 0px;
		background-color: #FEFEFE;
		color: #000000;
		font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
		font-size: 100%;
	}

	#box{
		width: 80%;
		margin: 5px;
		border: 1px solid #7D7D7D;
		padding: 3px;
		background-color: #E9E9E9;
	}
	.boxbreite {
		margin: 0 0 5px 0;
		border: 1px solid #7D7D7D;
		padding: 3px;
		background-color: #ff9933;
		font-size: 0.7em;
	}


	fieldset, form {
		margin: 0;
		padding: 0;
		border:	none;
	}
	#textfield{
		width: 100%;	/* wichtig */
		background-color: #ff9933;
		text-align: center;
	}

	#textfield textarea {
		width: 98%; /* keine 100% wegen border [box-model] */
		height: 120px;
		margin: 0;
		border: 1px solid #7D7D7D;
		padding: 3px;
		color: #000000;
		background-color: #FFFBF0;
		font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; /* wichtig weil textarea nicht Erbt*/
		font-size: 0.8em;
		overflow: auto;
	}
	
	span {
		font-size: 0.6em;
	}

	-->
</style>



</head>
<body>

<div id="box"> 

	<span>accept-charset="<?php echo $str_charset?>" in form-Tag</span>
	 
	<form action="<?php $_SERVER["PHP_SELF"]?>" method="post" accept-charset="<?php echo $str_charset?>">
	 
		<div id="textfield">
			<textarea cols="50" rows="20" name="text"><?php echo $_REQUEST["text"];?></textarea>
		</div> 
		
		<fieldset>
			<input type="submit" name="submit_name" />
		</fieldset> 
	
	</form> 
	
	<span>Byte: <?php echo strlen($_REQUEST["text"]);?>
</span> 
		
	<span>$_REQUEST[] from BROWSER</span>
	 
	<div class="boxbreite"><?php echo $_REQUEST["text"]; ?></div> 
		
</div> 

</body></html>
edit: kleiner Tippfehler im CODE
__________________
</ulle>
Mit Zitat antworten
  #9 (permalink)  
Alt 21.09.2005, 17:12
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 09.07.2004
Beiträge: 1.103
cgdesign befindet sich auf einem aufstrebenden Ast
Standard

versuch es halt noch mit utf8_decode($_POST['inhalt']);
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 24.09.2005, 12:58
Benutzerbild von Boris
Tanzender Webentwickler
XHTMLforum-Kenner
 
Registriert seit: 29.07.2004
Ort: Kornwestheim / Stuttgart
Beiträge: 4.925
Boris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer Mensch
Standard

In dem 1. Beispiel werden die Daten (im UTF-8 Format) via Email übertragen. Damit das klappt, musst du entweder die Daten umwandeln (utf8_decode) oder einen entsprechenden Header angeben:

Code:
$extheader = "From: $absender\n"		// Nötige HEADER-Angaben
							."Content-Type: text/plain; charset=\"utf-8\"\n"
							."Content-Transfer-Encoding: 8bit\n"

mail($name, $titel, $nachricht, $extheader);
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris Bojic
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Formulardaten Speichern GrinziA Serveradministration und serverseitige Scripte 9 13.11.2012 17:59
Formulardaten verstecken Megabiker (X)HTML 3 18.02.2011 11:44
Formulardaten in Datenbank speicher kaspam Serveradministration und serverseitige Scripte 9 07.02.2011 19:36
Ajax - Php: Alle Formulardaten trotz Tabs speichern HaraldMenza Javascript & Ajax 0 18.12.2008 13:34
XHTML Formulardaten in XML speichern skribi (X)HTML 4 04.07.2005 12:03


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:03 Uhr.