PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : <TEXTAREA><PRE>....</PRE></TEXTAREA> geht nicht


mf_2
2007-11-22, 08:53:01
Hallo,

Ich wollte in einer Textbox ein HTML Tag (<HTMLTag>) anzeigen lassen und <TEXTAREA><HTMLTag></TEXTAREA> ist leider keine Option.

<TEXTAREA><PRE><HTMLTag></PRE></TEXTAREA> geht nicht. Wahrscheinlich weil PRE einfach deprecated ist.
Gibt es ein Attribut für die Textbox o.ä., die verhindert, dass die Tags interpretiert werden?

Gruß,
mf_2

darph
2007-11-22, 09:36:29
Das hat nichts mit der Deprecation zu tun. Woher soll der Interpreter denn wissen, was du als HTML interpretiert haben möchtest, und was als Text?

Du mußt die entsprechenden Zeichen maskieren (http://de.selfhtml.org/html/allgemein/zeichen.htm#html_eigene).

<textarea>&lt;tag /&gt;</textarea>

mf_2
2007-11-22, 11:25:33
Das geht aber nicht, aus denselbem Gründen, aus denen < und > auch nicht gehen.
Ich will eine PHP Datei zum Bearbeiten in einen Textarea laden. In dieser PHP Datei kommen HTML Tags vor, welche mittels einem str_replace angezeigt statt ausgeführt werden.
Jetzt gibt es in der PHP-Datei aber auch folgende Anweisung:
str_replace("<","&#60;",$lol);
Da wird dann beim erneuten Abspeichern der Datei ein
str_replace(">","&#62;",$lol);
draus, was blöd ist.
Genauso gehen mir mehrere Leerzeichen hintereinander verloren, weil "&nbsp;&nbsp;&nbsp;&nbsp;" zu einem Leerzeichen wird.
Das will ich verhindern.

darph
2007-11-22, 11:56:55
Wo ist denn das Problem, das ganze mit htmlentities (http://de3.php.net/manual/de/function.htmlentities.php) zu codieren und dann entsprechend wieder zu decodieren?



<?php
$phpfile = '<p>
<a href="lala.html">
Date: <?php echo("date 01.01.1900"); ?>
</a>
</p>'; // irgendwie mit fopen und fread eingelesen.

echo('<textarea cols="80" rows="5">');
$encoded = htmlentities($phpfile, ENT_QUOTES); // darstellbar machen.
echo($encoded);
echo("</textarea>");
?>




So schaut das dann aus, was innerhalb des Textareas steht: &lt;p&gt;
&lt;a href=&quot;lala.html&quot;&gt;
Date: &lt;?php echo(&quot;date 01.01.1900&quot;); ?&gt;
&lt;/a&gt;
&lt;/p&gt;

Der Browser zeigt es aber korrekt an:
http://img208.imageshack.us/img208/8220/bild2dc8.png


Und wenn du das dann wieder in die Datei schreibst, machst du die Codierung mit html_entity_decode (http://de3.php.net/manual/de/function.html-entity-decode.php) rückgängig.

<?php
// Funktion aus dem Manual geklaut.
function writeToFile($filename, $content) {
// Sichergehen, dass die Datei existiert und beschreibbar ist
if (is_writable($filename)) {
// Wir öffnen $filename im "Anhänge" - Modus.
// Der Dateizeiger befindet sich am Ende der Datei, und
// dort wird $somecontent später mit fwrite() geschrieben.
if (!$handle = fopen($filename, "a")) {
print "Kann die Datei $filename nicht öffnen";
exit;
}

// Schreibe $content in die geöffnete Datei.
if (!fwrite($handle, $content)) {
print "Kann in die Datei $filename nicht schreiben";
exit;
}
print "Fertig, in Datei $filename wurde geschrieben";
fclose($handle);
} else {
print "Die Datei $filename ist nicht schreibbar";
}
}


$encoded_code = '&lt;p&gt;
&lt;a href=&quot;lala.html&quot;&gt;
Date: &lt;?php echo(&quot;date 01.01.1900&quot;); ?&gt;
&lt;/a&gt;
&lt;/p&gt;'; // das kommt so vermutlich aus einer
// $_POST[]-Variable, schließlich ist das der Inhalt des textareas

$decoded_code = html_entity_decode($encoded_code, ENT_QUOTES); // escapes wieder rückgängig machen
$filename = "./test.php";

writeToFile($filename, $decoded_code); // in Datei schreiben
?>

So sieht dann der Inhalt der Datei aus: <p>
<a href="lala.html">
Date: <?php echo("date 01.01.1900"); ?>
</a>
</p>


Wenn ich die Datei dann vom Server aus lade, dann funktioniert alles so, wie es soll:

http://img401.imageshack.us/img401/3457/bild1gi3.png

mf_2
2007-11-22, 15:43:02
:massa: :massa: :massa: :massa: :massa:

Super, danke!!!!!!!!!!! Damit ist mein Script ungefähr 10mal so nützlich wie vorher ;)

Coda
2007-11-22, 18:36:34
Was genau macht das Script denn? Das klingt ziemlich sicherheitsleckig was du da machst.

mf_2
2007-11-23, 07:56:11
Es ist ein Online-Editor, der mir ermöglicht, die Seiten meiner Homepage zu editieren ohne auf einem Rechner lokal was machen zu müssen (also mit notepad oä.)
Da dieses Script ausschließlich von mir privat genutzt wird, sehe ich da kein allzu großes Problem.

darph
2007-11-23, 11:56:14
Für sowas verwendet man eigentlich zwei unterschiedliche Systeme. Einmal das Produktivsystem und einmal die Entwicklungsumgebung.

Wie stellst du sicher, daß nur du das verwenden kannst?

mf_2
2007-11-23, 14:05:32
Ich habe eine sessionbasierte Authentifizierung drin und es läuft momentan nur auf einem lokalen Webserver.