Zur Navigation

Formular "frisst" HTML-Entitäten

1 scanner

Guten Tag zusammen,

problem: formular sendet eingaben unverändert, beim holen werden html-entitäten aber in zeichen umgewandelt. das ist aber schlecht...

es handelt sich um einen veranstaltungskalender dessen betreuung ich übernommen habe. der originale programmierer ist nicht erreichbar.

die eingaben in den textfeldern werden später direkt ausgegeben und müssen daher mit html formatiert werden. beim senden des formulars werden html-entitäten unverändert in die datenbank übernommenn; sie sind beim abrufen des kalenders im quellcode vorhanden.

beim aufrufen über das backend, um die angaben zu editieren, werden die zeichen aber interpretiert in das formular geladen; also ä ist jetzt ä, usw.

das führt natürlich dazu dass beim aktualisieren "alles futsch" ist.

wie komme ich dem "hund" auf die spur?

ps: im phpforum.de habe ich heute noch keine weiterführende antwort erhalten, nur: "es sei doch sinnvoller umlaute zu habe und diese dann vor dem senden mit htmlentities() zu wandeln"... natürlich sind nicht die umlaute das problem, sondern zeichen die der editor nicht handhaben kann, wie gedankenstrich oder anführungszeichen, und vor allem  

pps: bei weiteren tests mit eingefügten spezialzeichen aus wörd (gedankenstriche, anführungszeichen) zeigt sich verwirrliches; einige zeichen werden beim senden in unicode gewandelt, andere nicht, beide aber vorher und nachher im editor richtig dargestellt... (ja es ist browserunabhängig) ausserdem habe ich den verdacht dass der server schuld ist... ich prüfe es noch mal, aber ich meine das die eben beschriebenen zeichen in einigen tagen gänzlich verwurstet werden, also nur noch fragezeichen übrig bleiben... ist es möglich das der server schuld ist..? ... argh... (wo ist eigentlich bielefeld..)

29.07.2008 19:11

2 Jörg Kruse

Hallo scanner,

beim aufrufen über das backend, um die angaben zu editieren, werden die zeichen aber interpretiert in das formular geladen; also ä ist jetzt ä, usw.

Dann müssen die Zeichen vor der Ausgabe ins Formular nochmal mit htmlentities() behandelt werden. Ein ä wird im Formular als ä angezeigt, ein doppelt codiertes ¨ als ä

bei weiteren tests mit eingefügten spezialzeichen aus wörd (gedankenstriche, anführungszeichen) zeigt sich verwirrliches; einige zeichen werden beim senden in unicode gewandelt, andere nicht, beide aber vorher und nachher im editor richtig dargestellt...

An welcher Stelle werden denn welche Zeichen wie ausgegeben? MS Word verwendet einen Zeichensatz der mit anderen Zeichensätzen wie z.B. ISO-8859-1 an einigen Stellen nicht kompatibel ist und wohl eine Umwandlung über utf-8 erfordert. Solange es am Ende richtig ankommt, würde ich mir aber keine allzu großen Sorgen machen

29.07.2008 19:27

3 scanner

Zitat von Jörg
Dann müssen die Zeichen vor der Ausgabe ins Formular nochmal mit htmlentities() behandelt werden. Ein ä wird im Formular als ä angezeigt, ein doppelt codiertes ¨ als ä

was meinst du mit "müssen"? muss ich das irgendwo hinzufügen, oder muss es schon irgendwo vorhanden sein. im gesammten kalender ist nirgends ein spürchen htmlentities() zu entdecken.. das ist ja mein rätsel. ä und ä werden so in die db gespeichert, aber als ä und ä wieder ins formular geladen. _warum?_

An welcher Stelle werden denn welche Zeichen wie ausgegeben? MS Word verwendet einen Zeichensatz der mit anderen Zeichensätzen wie z.B. ISO-8859-1 an einigen Stellen nicht kompatibel ist und wohl eine Umwandlung über utf-8 erfordert. Solange es am Ende richtig ankommt, würde ich mir aber keine allzu großen Sorgen machen

es kommt ja nicht "richtig an". richtig wäre dass     bleibt, und nicht zum leerzeichen mutiert, denn der inhalt des feldes ist "html" und nicht "text". – wo geschieht also die wandlung.

30.07.2008 00:06

4 Jörg Kruse

Zitat von scanner
Zitat von Jörg
Dann müssen die Zeichen vor der Ausgabe ins Formular nochmal mit htmlentities() behandelt werden. Ein ä wird im Formular als ä angezeigt, ein doppelt codiertes ¨ als ä

was meinst du mit "müssen"? muss ich das irgendwo hinzufügen, oder muss es schon irgendwo vorhanden sein. im gesammten kalender ist nirgends ein spürchen htmlentities() zu entdecken.. das ist ja mein rätsel. ä und ä werden so in die db gespeichert, aber als ä und ä wieder ins formular geladen. _warum?_

Nein, ä wird auch als ä ins Formular geladen - allerdings wird es als ä angezeigt. Schau doch mal in den Quelltext der HTML-Datei. So eine Vorbelegung ...:
<textarea name="user_eingabe" cols="50" rows="10">&auml</textarea>
... wird angezeigt als ä.
Wenn du in einem Eingabefeld ein &auml; angezeigt haben möchtest, musst du &auml; zu einem &amp;uml; codieren

es kommt ja nicht "richtig an". richtig wäre dass &nbsp; &nbsp; bleibt, und nicht zum leerzeichen mutiert, denn der inhalt des feldes ist "html" und nicht "text". – wo geschieht also die wandlung.

Wenn auch hier die Anzeige in einem Textarea gemeint ist: dort werden die Entities genauso umgewandelt wie außerhalb eines Formulares. Im Normalfall wollen die Anwender keine Entities sehen - auch nicht in einem Formularfeld. Wenn du dies für dich anders handhaben möchtest, musst du die Vorbelegung mit htmlentities() ein zweites Mal codieren

30.07.2008 00:27 | geändert: 30.07.2008 00:28

5 scanner

ok, dass in textarea der code steht und im editfeld das zeichen gezeigt wird habe ich jetzt gesehen. aber wo und wie muss ich das ampersand doppelt kodieren. wie geht das. es gibt nirgends ein htmlentites()-konstrukt zum abgucken.

und der inhalt des feldes wird direkt als html interpretiert, also muss das doch beim editieren so drinnstehen wie ich es früher mal eingegeben habe. die korrekte anzeige hängt davon ab!

wo und wie muss ich die vorbelegung "ein zweites mal" codieren. durch was wird sie denn das erste mal codiert?

30.07.2008 01:10

6 Jörg Kruse

Bei der Ersteingabe des Textes ist das Formular ja noch nicht vorbelegt. Wenn ich dich richtig verstanden habe, gibst du den Text dann selbst in codierter Form ein, d.h. z.B. mit einem &nbsp; statt mit einem Leerzeichen

Beim Editieren soll das Script das Formular vorbelegen. Damit der vorbelegte Text in der Ansicht mit HTML-Entitäten codiert ist, muss er nach der Abfrage aus der Datenbank und vor der Ausgabe ins Formular mit htmlentities() behandelt werden. So würde das z.B. gehen:

<textarea name="user_eingabe" cols="50" rows="10"><?php echo htmlentities($text) ?></textarea>

und der inhalt des feldes wird direkt als html interpretiert, also muss das doch beim editieren so drinnstehen wie ich es früher mal eingegeben habe.

Das tut es nicht, weil die Browser den Text für die Anzeige sowohl außerhalb als auch innerhalb von Formularfeldern decodieren.

30.07.2008 07:39

7 scanner

Vielen Dank, das hats gebracht!
aber warum ist das so. decodiert der browser die entities "heimlich" bevor er sie ins textfeld schreibt, (mit tags macht er das ja nicht) und ich muss sie wieder codieren?
warscheinlich..
kann man diese dekodierung selektiv verwenden, also zb nur für &nbsp; ?

30.07.2008 08:24

8 Jörg Kruse

aber warum ist das so. decodiert der browser die entities "heimlich" bevor er sie ins textfeld schreibt, (mit tags macht er das ja nicht)

Meinst du mit Tag so eine Zeichen-Kombination:

&lt;strong&gt;

Auch diese wird - in der Anzeige - decodiert zu "<strong>"

kann man diese dekodierung selektiv verwenden, also zb nur für &nbsp; ?

Du meinst eine selektive Codierung, nehme ich an :)? Diese könnte man mit str_replace() vornehmen

<textarea name="user_eingabe" cols="50" rows="10"><?php echo str_replace('&nbsp;', '&amp;nbsp;', $text) ?></textarea>

30.07.2008 09:03 | geändert: 30.07.2008 09:04

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]