Text-Datei editieren: aus " wird \"

danielvs

Grünschnabel
Hallihallo...

ich hab ein Problem und zwar hab ich ne Textdatei, die in nem Formular geöffnet wird und editierbar ist. Anschliessend wird das ganze an folgenden script gesendet, der die.. naja... "änderungen" speichert, bzw die übernommenen inhalte plus die neuen wieder in in die text-datei reinschreibt:


das ist der code für die verarbeitung:

PHP:
<?php 
$text = $HTTP_POST_VARS["text"]; 
$datei = fopen("test.txt", "w"); 
fwrite ($datei, $text); 
fclose ($datei); 
echo "Der eingegebene Text wurde erfolgreich eingetragen"; 
?>


Funktioniert soweit auch ganz gut. Wenn jetzt allerdings HTML-Inhalte in die txt-datei geschrieben werden, dann wird dank addslashes() ja aus allen

"

ein

\"

Ich denke, es fehlt nicht sehr viel, habe auch schon ein wenig mit preg_replace() und stripslashes() ausprobiert, bin aber auf dem gebiet php noch ganz neu.


über ein paar tipps und hilfestellung würde ich mich freuen.
 
Probiere einmal folgendes:

PHP:
<?php
    $textdatei = "test.txt";
    
    if(isset($_POST['text'])){
       $text = $_POST["text"];  
       $datei = fopen($textdatei, "w"); 
       
       if(isset($_POST['text']) && fwrite ($datei,$text)){
          $ergebnis = "Der eingegebene Text wurde erfolgreich eingetragen";
       }
        
       fclose ($datei);
    }

    function lesen($a){
       $b = fopen($a,"r");
       $c = fread($b,1000); 
       $d = chr(92);      
       $e = str_replace($d,'',$c);
       echo $e;
       fclose($b);
    }

 
?>
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">        
        <title>Formular</title>
    </head>

    <body bgcolor="#ffffff">
        <form id="FormName" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" name="FormName">
            <textarea name="text" rows="4" cols="40"><?php lesen($textdatei) ?></textarea><br>
            <br>
            <input type="submit" name="submitButtonName">
        </form>
        <p><?php echo $ergebnis ?></p>
    </body>

</html
 
Richtig, wenn der Text zuvor mit addslashes() bearbeitet
wurde ist der korrekte Weg die zu schützende Zeichen
wieder mit stripslashes zu entfernen.
Da es aber anscheinend ein Problem gibt, habe ich einmal
einen anderen Weg vorgeschlagen.

So wäre es korrekt:
PHP:
<?php
    error_reporting(E_ALL);
    $textdatei = "test.txt";
    
    if(isset($_POST['text'])){
       $text = $_POST["text"];  
       $datei = fopen($textdatei, "w"); 
              
       if( addslashes(fwrite ($datei,$text))){
           $ergebnis = "Der eingegebene Text wurde erfolgreich eingetragen";
       }
       else{
            $ergebnis = "Fehler!";
       }
        
       fclose ($datei);
    }

    function lesen($a){
       $b = fopen($a,"r");
       $c = fread($b,1000); 
       $d = stripslashes($c);      
       echo $d;
       fclose($b);
    }

?>
 
Vielen Dank für eure Hilfe.

Bin jetzt mit stripslashes zum Ziel gekommen.

War eigentlich ganz einfach, aber hin und wieder sieht man eben den Wald vor lauter Bäumen nicht ^^

hier mal das, wenn auch nur minimal veränderte, Ergebnis:


PHP:
<?php 
$text = $HTTP_POST_VARS["text"]; 
$datei = fopen("test.txt", "w"); 
$str = stripslashes($text);
fwrite ($datei, $str); 
fclose ($datei); 
echo "Der eingegebene Text wurde erfolgreich eingetragen"; 
?>


Trotzdem Danke für die Hilfe :)
 
Wie bereits erwähnt, ist der Einsatz der stripslashes()-Funktion nur dann sinnvoll, wenn die Magic Quotes tatsächlich aktiviert sind. Daher sollte du – falls du wirklich den umständlichen Weg über die Einzelbearbeitung gehen willst – die aktuelle Konfigurationseinstellung mit einbeziehen:
PHP:
if( get_magic_quotes_gpc() ) {
	$string = stripslashes($string);
}
Aber falls dir das alles zu umständlich ist, kannst du natürlich auch ganz einfach die Magic Quotes deaktivieren. Wie das geht, hab ich ja bereits erwähnt.
 
Richtig, magic_quotes sind nicht immer enabled. Daher empfieht sich eine Wrapper-Funktion zu bauen:

PHP:
function real_output($string)
{
    get_magic_quotes_gpc() ? return strip_slashes($string) : return $string;
}

In diese Funktion kannst du im übrigen noch mehr tolle Sachen machen. Ein Beispiel wäre alle ASCII-Smilies in Bildchen umzuwandeln. Mal vom Sinn der Sache abgesehen.
 
Zurück