Portal > Foren > PHP > PHP-Programmierung > utf-8 Daten schreiben mit fwrite()
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 25.03.2007, 22:42 Nach oben    #1
Jan
Erfahrener Benutzer
 
Benutzerbild von Jan
 
Registriert seit: 08.01.2006
Ort: Mannheim
Beiträge: 483
Standard utf-8 Daten schreiben mit fwrite()

Hallo,

ich ändere den Inhalt einer Datei mit fwrite()
PHP-Code:
     if ( !fwrite$handle$inhalt ) ) {
     
printf'Die Datei %s konnte nicht geändert werden.'$datei );
     return 
false;
     } 
Leider klappt das mit utf-8 Zeichen nicht. Wenn ich ein "ü" schreiben möchte, schreibt er nichts in die datei. Eine Ausgabe von $_POST zeigt aber das "ü".

Wie kann ich das beheben?

//EDIT:
Hab was gefunden. Gibt es eine andere Möglichkeit? Oder ist das die richtige?
PHP-Code:
     if ( !fwrite$handleutf8_encode($inhalt) ) ) {
     
printf'Die Datei %s konnte nicht geändert werden.'$datei );
     return 
false;
     } 
__________________
Jan
info.malte-gerth.de
=================================
Nutzt bitte lieber Jabber statt ICQ:
malte.gerth@jabber.cz

Geändert von Jan (25.03.2007 um 23:13 Uhr)
Jan ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.03.2007, 23:19 Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 306
Standard

Guck dir mal hier den obersten Kommentar (von cutmaster at fearlesss dot com) an.
Auch die übrigen Kommentare könnten weiterhelfen.
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.03.2007, 10:37 Nach oben    #3
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.03.2007, 19:09 Nach oben    #4
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 306
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
Wie darf ich das verstehen?
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.03.2007, 20:26 Nach oben    #5
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard

Genau das shock war mein Gefühl, als ich den Kommentar gelesen hab, da das doch sehr merkwürdig ist.

Denke nicht, dass das negativ auf dich bezogen war.
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.03.2007, 21:41 Nach oben    #6
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 306
Standard

Funktioniert es wenigstens?
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.03.2007, 11:08 Nach oben    #7
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Zitat:
Zitat von Artemis Beitrag anzeigen
Genau das shock war mein Gefühl, als ich den Kommentar gelesen hab, da das doch sehr merkwürdig ist.

Denke nicht, dass das negativ auf dich bezogen war.
So ists. PHP hält einfach immer wieder ganz schräge Überraschungen bereit.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.03.2007, 18:18 Nach oben    #8
Benutzer
 
Registriert seit: 24.10.2006
Beiträge: 90
Standard

Das ist eigentlich ganz nicht ungewöhnlich denn,
  • PHP ist ein binärer Prozessor
  • Der Core von PHP hat kaum bis gar keine Ahnung von Encodings.
  • Ein String ist byte-orientiert
Wenn du jetzt UTF-8 hast, so ist ein Zeichen bis zu 4 Byte groß. Da PHP aber eben byte-orientiert ist werden einfach alle Bits bis auf die letzten 8 abgeschnitten. Ja und da kommt dann halt meistens nix gscheites dabei raus.

Wenn du das aber direkt an die Funktion übergibst, so wird das einfach als ein Haufen von Bytes betrachtet und in die Datei geschrieben.

MfG Byrel
Byrel ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.03.2007, 20:04 Nach oben    #9
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 551
Standard

naja, is aber schon sehr komisch, dass die direkte Übergabe eines Funktionswertes ein anderes Ergebnis liefert als die Übergabe des Funktionswertes in einer Variablen gespeichert. Kenne ich so aus keiner Programmiersprache und diese Konzeption widerspricht imo auch der Verwendung bzw. Bedeutung von Variablen.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.04.2007, 10:37 Nach oben    #10
Jan
Erfahrener Benutzer
 
Benutzerbild von Jan
 
Registriert seit: 08.01.2006
Ort: Mannheim
Beiträge: 483
Standard

So, irgendwie klappt es nicht mehr.
Mein Code sieht so aus:
PHP-Code:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<?php
    error_reporting
(E_ALL);
#    require("function_template.php");
/*            function_template.php        */
function leseAusDatei$datei ) {
    if ( !
$inhalt file_get_contents$datei ) ) {
        
printf'Es trat ein Fehler beim Lesen der Datei %s auf.'$datei );
        return 
false;
    }
    return 
$inhalt;
}

function 
schreibeInDatei$datei$inhalt ) {
     if ( !
$handle fopen$datei"w+") ) {
        
printf'Die Datei %s kann nicht geöffnet werden'$datei );
        return 
false;
     }
     if ( !
fwrite$handleutf8_encode($inhalt) ) ) {
        
printf'Es trat ein Fehler beim Schreiben des Inhalts in die Datei %s auf.'$datei );
        return 
false;
     }
     
fclose$handle );
}
/*            function_template.php        */

    
session_start();
##############################################################
if (array_key_exists('aendern'$_POST))
{
        
#schreibeInDatei( './'.$_POST['datei'], utf8_decode($_POST['inhalt']));
        
schreibeInDatei'./'.$_POST['datei'], $_POST['inhalt']);
        echo 
'<a href="index.php">Weiter</a>';
}
###############################################################
else
{
        
$inhalt leseAusDatei('test.txt');


    echo 
'
    <form method="post" action="'
.$_SERVER["PHP_SELF"].'">
        <h3>Inhalt der Textdatei:</h3>
        <textarea rows="20" cols="80" name="inhalt">'
.$inhalt.'</textarea><br />
        <input type="hidden" name="datei" value="test.txt" />
        <input type="submit" name="aendern" value="&Auml;ndern">
    </form>'
;
}
?>
Folgenden String will ich speichern:
Zitat:
ä
ü
ß
@

¹
²
³
¼
½
¬ạ
{
[
]
}
\
@ł€¶ŧ←↓→øþłĸjħŋđðßæ|«»¢“”nµ─·
Folgendes erscheint in der Datei:
Zitat:
ä
ü
ß
@
€
¹
²
³
¼
½
¬ạ
{
[
]
}
\
@ł€¶ŧâ†â†“→øþłĸjħŋđðßæ|«»¢“ â€nµ─·
Wieso klappt das nicht?
Wie speichert ihr denn die Daten als utf-8 ab?
__________________
Jan
info.malte-gerth.de
=================================
Nutzt bitte lieber Jabber statt ICQ:
malte.gerth@jabber.cz
Jan ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.04.2007, 11:13 Nach oben    #11
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Sieht so aus, als wäre de Zeichenkette in UTF-8 gespeichert und du betrachtest sie nur "durch" die Latin-1-Tabelle (o.Ä.).

Wie schaust du dir die Datei denn an? Ist der Editor/Betrachter auch auf UTF-8 eingestellt? Beziehungsweise der Browser, wenn du die Daten ausspuckst?

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.04.2007, 11:14 Nach oben    #12
Jan
Erfahrener Benutzer
 
Benutzerbild von Jan
 
Registriert seit: 08.01.2006
Ort: Mannheim
Beiträge: 483
Standard

Ha klar,

siehe Code
Aber auch der Editor ist auf utf-8 eingestellt.
__________________
Jan
info.malte-gerth.de
=================================
Nutzt bitte lieber Jabber statt ICQ:
malte.gerth@jabber.cz
Jan ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.04.2007, 11:32 Nach oben    #13
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Grad mal rumprobiert:

Das Formular wird bei mir trotz Meta-Tag als utf-8 ausgegeben. Müsstest schon auch den korrekten Header senden, um das Formular "verbindlich" auf Latin-1 zu stellen.

Folglich wird das "ä" utf-8-kodiert verschickt und dann durch dein utf8_encode() als Latin-1 interpretiret und "nochmal" in utf-8 umgewandelt. Klar, dass das nicht gehen kann.

Wenn ich den Zeichensatz der Formular-Seite explizit auf Latin-1 setze und dann ein ä reintippe, dann landet auch ein utf-8-"ä" in der Datei.

Kannst du nicht wirklich alles auf utf-8 stellen? Also sowohl PHP, als auch die generierten Seiten, als auch MySQL etc.?

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.04.2007, 13:21 Nach oben    #14
Jan
Erfahrener Benutzer
 
Benutzerbild von Jan
 
Registriert seit: 08.01.2006
Ort: Mannheim
Beiträge: 483
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
Kannst du nicht wirklich alles auf utf-8 stellen? Also sowohl PHP, als auch die generierten Seiten, als auch MySQL etc.?
Ja, versuche ich im Moment, und da ist mir eben dieser Fehler aufgefallen.

Okay, ich versuch jetzt nochmal was ...... Melde mich dann wieder.

//edit:

Okay, nachdem jetzt alles utf-8 ist scheint es zu gehen.
Der Code ist noch etwas älter, da hab ich noch mit ISO-8859-15 gearbeitet.
Jetzt läuft es wieder wunderbar.
Danke fürs öffnen der Augen.
__________________
Jan
info.malte-gerth.de
=================================
Nutzt bitte lieber Jabber statt ICQ:
malte.gerth@jabber.cz

Geändert von Jan (30.04.2007 um 13:26 Uhr)
Jan ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hardware-RAID-Lösung robo47 Plauderecke 29 26.12.2007 04:49
[JAVA] Wie man aus Java mit einem PHP-Script kommuniziert sparrow Tutorials 0 25.03.2006 22:24
daten in array eintragen und auslesen zerberos Allgemeine Java-Programmierung 15 20.02.2005 21:49
[PHP] Wie übergebe ich Daten per URL? Ben Tutorials 0 05.12.2004 14:36


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45