| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

14-07-2009, 09:37
|
|
Daether
Registrierter Benutzer
|
|
Registriert seit: Jul 2006
Beiträge: 151
|
|
Polnishe Sonderzeichen, UTF-8
Moin Moin,
ich habe z.Zt. folgendes Problem:
Ich habe ein Formular, welches ein input/text-Feld enthält. Dieses soll beim Abschicken ausgegeben werden und in eine Datei geschrieben werden.
PHP-Code:
print( htmlentities ($_POST["mail"] ,ENT_COMPAT , "UTF-8" ) ) ;
print( html_entity_decode ($_POST["mail"] ,ENT_COMPAT , "UTF-8" ) ) ;
print( htmlspecialchars ($_POST["mail"] ,ENT_COMPAT , "UTF-8" ) ) ;
print( htmlspecialchars_decode ($_POST["mail"] ) ) ;
print( utf8_encode ($_POST["mail"] ) ) ;
print( utf8_decode ($_POST["mail"] ) ) ;
$handle = fopen("testify.txt" , "w+" ) ;
fwrite ( $handle , $_POST["mail"] ) ;
Es handelt sich hierbei speziell um polnische Sonderzeichen, ich teste immer mit folgendem Wort :
Łączymy
Das Problem ist, dass die polnischen Sonderzeichen immer ersetzt werden durch Fragezeichen, sowohl beim schreiben als auch bei jedem Print.
Der Charset der Formularseite ist im übrigen auf UTF-8 gestellt.
Hat jemand eine Idee was ich falsch mache ?
MfG Daether
|

14-07-2009, 10:34
|
Abraxax
  THE REAL HAXE (Administrator)
|
|
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.621
|
|
|

14-07-2009, 12:00
|
|
pekka
PHP Master
|
|
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
|
|
Ist denn auch die Seite, auf der Du die print()s machst, ausdrücklich UTF-8 kodiert?
Stehen auf der Formularseite gesendeter Content-Type-Header und Kodierungsangabe beide auf UTF-8? Ersteres kannst Du mit der Web Developer Extension von Firefox rausfinden: Information > View Response Headers.
|

14-07-2009, 12:01
|
Abraxax
  THE REAL HAXE (Administrator)
|
|
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.621
|
|
So .. Ich habe ein kleines Testscript geschrieben und das Problem nachvollzogen und ebenfalls keine Lösung auf dem klassischen Weg finden können.
Zur Info .. Ich habe die Tabelle leicht modifiziert.
Hier das Testscript:
PHP-Code:
<?php
/*
CREATE TABLE IF NOT EXISTS `newsletter_pl_adressen` (
`ID` int(11) NOT NULL auto_increment,
`mail` varchar(60) NOT NULL,
`aktiv` tinyint(1) NOT NULL,
`vorname` varchar(30) NOT NULL,
`nachname` varchar(30) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*/
// Error Reporting aktivieren
error_reporting(E_ALL);
// passenden UTF8 header senden
header('content-type: text/html; charset=utf-8');
// Alle Daten sollen immer als UTF8 verarbeitet werden.
iconv_set_encoding('input_encoding', 'utf-8');
iconv_set_encoding('output_encoding', 'utf-8');
iconv_set_encoding('internal_encoding', 'utf-8');
// Verbindung aufbauen
$db = new mysqli ('hostname', 'user', 'pass');
// Verbindung auf UTF8 setzen.
$db->query('SET NAMES "utf8"');
$db->query('SET CHARACTER SET "utf8"');
// Datenbank wählen
$db->select_db('database');
// Parameter übernehmen, wenn vorhanden ...
$mail = isset($_POST['mail']) ? $_POST['mail'] : 'n/a';
// Datensatz schreiben
$db->query('INSERT INTO newsletter_pl_adressen ( mail , aktiv ) VALUES ("'.$db->real_escape_string($mail).'" , 0 ) ');
// evtl. Fehler ausgeben ...
if ( $db->errno )
{
die('Error #'.$db->errno.': '.$db->error);
}
?>
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="mail" value="" />
<input type="submit" />
</form>
Den Thread habe ich wieder geöffnet ...
EDIT: Zugangsdaten entfernt
Geändert von Abraxax (14-07-2009 um 12:07 Uhr)
|

14-07-2009, 13:19
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Das hat doch überhaupt nichts mit der DB zu tun, wie auch schon im Debianforum festgestellt wurde. Es liegt am Formular!
Und damit gehts weg:
<form method="post" accept-charset="UTF-8">
|

14-07-2009, 13:21
|
|
pekka
PHP Master
|
|
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
|
|
Zitat:
Zitat von onemorenerd
Und damit gehts weg:
<form method="post" accept-charset="UTF-8">
|
Getestet?
|

14-07-2009, 13:25
|
|
Daether
Registrierter Benutzer
|
|
Registriert seit: Jul 2006
Beiträge: 151
|
|
Hatte ich in meinen Skript versucht, leider ohne Erfolg.
|

14-07-2009, 13:29
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Zitat:
Zitat von pekka
Getestet?
|
Jap. Willst du auch mal?
PHP-Code:
<?php header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head><title></title></head> <body> <form method="post" accept-charset="UTF-8"> <input type="text" name="mail" value="" /> <input type="submit" /> </form> <?php print isset($_POST['mail']) ? $_POST['mail'] : ''; ?> </body> </html>
Eigentlich sollte der Content-Type-Header bzw. ein entsprechendes Meta-Tag schon genügen. Aber manche Browser sind dümmer als andere und deshalb ist es sinnvoll, dem Formular das accept-charset mitzugeben.
Statt UTF-8 tuts für polnisch übrigens auch ISO-8859-2.
Geändert von onemorenerd (14-07-2009 um 13:33 Uhr)
|

14-07-2009, 13:37
|
|
Daether
Registrierter Benutzer
|
|
Registriert seit: Jul 2006
Beiträge: 151
|
|
Stimmt, die kurze Version funktioniert bei mir auch !
Vielen Dank erstmal dafür !
Ich werde jetzt mal Stück für Stück meine Sachen hinzufügen und schauen ob ich die Stelle finde, wo an der das Problem auftaucht. Melde mich wenn ich die Stelle finde !
//EDIT :
Hab die Datenbank nochmal abegrissen und neu gemacht. Jetzt gehts.
Nochmal HERZLICHEN DANK !
Geändert von Daether (14-07-2009 um 14:26 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|