Probleme mit specialchars && !specialchars

Unicate

Erfahrenes Mitglied
Also, ich will ein Template online bearbeiten können.
Dazu lese ich es aus, soweit klar.
ich muss meinen string durch htmlspecialchars jagen, da ich sonst probleme mit einigen Zeichen und tags hätte (z.B. die textarea, da ich das template in einer solchen anzeigen lasse und mein ausgegebenes template mir dann die ausgabe textarea beenden würde bevor sie zuende ist...)
soweit auch klar
aus "ä" wird "ä"
PHP:
$template = $LoadingTemplate->inhalt;
$EditTmp->assign("template", htmlspecialchars($template));
$EditTmp->output();
dann:
den bearbeiteten string nochmal specialcharsn *hrhr* (für die neu hinzugefügten tags ect.)
dann html_entity_decode um es wieder zu einer html zu machen
und dann noch stripslashes, weil ich slashes habe die nicht darein gehören :D

bsp:
specialchars: "ä" -> "&auml"
html_entity_decode: "&auml" -> \"ä\"
stripslashes: \"ä\" -> "ä"

edit: da bemerk ich, dass ich dass sowieso in "ä" haben wöllte... also jungs ich brauch echt hilfe

PHP:
$textfile = $_POST["template"];
$textfile = stripslashes(html_entity_decode(htmlspecialchars($textfile)));

und dann schreiben.

nun ein Problem.
Wenn ich die Datei wieder öffne haben sich auf den ersten blick die "\n"'s verdoppelt
also habe ich versucht alle zu löschen (mit str_replace) aber nun löscht er die datei vollständig.

hat jemand nen tollen Vorschlag, wie ich das besser machen könnte oder was ich falsch mache?
 
Zuletzt bearbeitet:
Arbeite mit der Zeichenkodierung UTF-8, dort ist das Ersetzen der „Sonderzeichen“ durch Zeichen-Entity-Referenzen nicht nötig, womit es eine mögliche Fehlerquelle weniger gäb.

Die einfachste Dateibearbeitung wäre wohl Folgendes:
PHP:
<?php

	$file = 'Beispieldatei';

	if( isset($_POST['file-content']) ) {

		file_put_contents($file, $_POST['file-content']);
		echo '<p>Datei wurde aktualisiert.</p>';

	}

	$file_content = file_get_contents($file);

?>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" accept-charst="utf-8">
	<p><label for="file-content">Dateiinhalt</label>
		<textarea id="file-content" name="file-content"><?php echo htmlspecialchars($file_content); ?></textarea></p>
	<p><input type="submit"></p>
</form>
Diverse Sicherheitsvorkehrungen fehlen natürlich noch.
 
spar ich mir da gar den ganzen fopen spaß?

ich werds mal versuchen danke

läuft auch nur unter PHP5... :( (da die meisten Server mit PHP5 mehr kosten is dat kacke..

Naja, ich hab die Preise die letzten
Wochen noch nicht gesehen. Mal schauen
 
Zuletzt bearbeitet:
Ok funktioniert ganz gut.
das ganze sieht bei mir jetzt so aus:
PHP:
          // bei ausgabe
          echo stripslashes(htmlspecialchars($template))); //$templatestrip

          // beim schreiben
          $file = "meine_html.htm";
          if(!(file_put_contents($file, $_POST["template"])))
          {
            // error
          } else  {
           // funktioniert
          }
        }

Man muss den Ausgabestring auch noch strippen lassen :D (stripslashes), dann nimmt das ganze gestalt an.
Funktioniert halt nur mit PHP5 das ist echt schade. Ich werds zwar verwenden, hätte aber nix dagegen, wenn jemand noch ne PHP4 lösung hätte
 
Die Lösung für PHP 4 wäre wahrscheinlich nur, dass andere Konstrukte für die Dateilese- und -schreibvorgänge benutzt werden müssen.
 
Also...Ausgabe dürfte klar sein mit specialchars und so

PHP:
  $file = "text.txt";
  if(isset($_POST["txt"]))
  {
    $template = $_POST["txt"];
    $template = stripslashes(html_entity_decode(htmlspecialchars($template)));
    if(!($fp = fopen($file, "wt")))
    {
      echo "fehler";
    } else  {
      fputs($fp, $template);
      fclose($fp);
    }
          
    echo "Updated";
  }
//edit: Fehlerfrei in PHP4 und PHP5

Jetzt nur noch ne function das alle ä's usw wieder umgewandelt werden, das das ganze auch international ansehbar ist (soll multilingual werden)
 
Zuletzt bearbeitet:
Wie bereits erwähnt, umfassen die meisten verwendete Zeichensätze – darunter auch der ISO-8859-1-Zeichensatz – auch die im Deutschen üblichen „Sonderzeichen“ wie die Umlaute und das ß-Zeichen. Daher sind Zeichenreferenzen n?i?c?h?t nötig.
 
Zurück