# maskieren Teil2
BerndM
- perl
Hi,
Auch wenn Siechfred mir eine definition für das maskieren des Ankerzeichens # in Url-Parametern gegeben hat stellt sich eine kleine Frage:
Wenn ich eine Url mit Parametern als Inhalt in einem xml-tags verwnede muß ich das & maskieren, Beispiel:
<pfad>
/cgiPfad/perl.pl?parameter1=xyz&parameter2=daten#Anker
</pfad>
In Attributen scheint das nicht nötig zu sein, aber doch im Inhalt.
Aus Erfahrung weis ich, das es bei der Verarbeitung eines solchen Inhalts in Perl manchmal zum Effekt kommt, das ein Browser diese Datei nicht findet manchmal doch. Bisher habe ich dann einfach ausprobiert wie es geht. Jetzt würde ich doch gern Wissen was dahinter steckt.
Bis bald Bernd
Hi,
Wenn ich eine Url mit Parametern als Inhalt in einem xml-tags verwnede muß ich das & maskieren, Beispiel:
ja, denn "&" ist in XML ein Sonderzeichen.
In Attributen scheint das nicht nötig zu sein,
Auch in Attributen ist "&" ein Sonderzeichen.
Aus Erfahrung weis ich, das es bei der Verarbeitung eines solchen Inhalts in Perl manchmal zum Effekt kommt, das ein Browser diese Datei nicht findet manchmal doch.
Vielleicht solltest Du beschreiben, was für eine Form der Verarbeitung stattfindet, und wie sich dieses "manchmal" zu einer Reproduzierbarkeit wandeln lässt. Browser "finden" übrigens keine Dateien, sondern fordern Ressourcen an - der Fragment Identifier wird dabei nicht mit übermittelt.
Cheatah
Hi,
Wenn ich eine Url mit Parametern als Inhalt in einem xml-tags verwnede muß ich das & maskieren, Beispiel:
ja, denn "&" ist in XML ein Sonderzeichen.
In Attributen scheint das nicht nötig zu sein,
Auch in Attributen ist "&" ein Sonderzeichen.
mh, Es wird aber doch akzeptiert, bei dem frame-tag Attribut: src.
Aus Erfahrung weis ich, das es bei der Verarbeitung eines solchen Inhalts in Perl manchmal zum Effekt kommt, das ein Browser diese Datei nicht findet manchmal doch.
Vielleicht solltest Du beschreiben, was für eine Form der Verarbeitung stattfindet, und wie sich dieses "manchmal" zu einer Reproduzierbarkeit wandeln lässt. Browser "finden" übrigens keine Dateien, sondern fordern Ressourcen an - der Fragment Identifier wird dabei nicht mit übermittelt.
Ja, das war nicht gut ausgedrückt. Die xml-Datei wird durch ein Script geladen und der Inhalt des pfad-Tags in ein Scalar getan, dann möglicherweise weiterverarbeitet und schließlich zum Beispiel in ein frame-Tag-Attribut-src gefüllt oder in ein meta-tag zur Weiterleitung oder, oder oder... Der content wird dann zum Browser geschickt und der Browser fordert dann wohl eine falsche Resource an. Besser? :-)
Es muß daran liegen, das durch die Weiterverarbeitung automagisch das & in ein anderes Format gewandelt wird, aber wann und wann nicht?
Programmiert habe ich diese Wandlung nicht. Sie tritt inzwischen nur noch selten auf, weil ich wohl diese Stellen entsprechend Versuch/Irrtum geändert habe.
Mir ist klar, das ich etwas in der Luft hänge, weil ich keinen konkreten Fall vorweise, aber vielleicht kann mir einer einen Hinweis geben worauf ich da achten kann, wo ich suchen kann.
Bis bald Bernd
Die xml-Datei wird durch ein Script geladen und der Inhalt des pfad-Tags in ein Scalar getan
Von Hand programmiert oder mit Hilfe eines Moduls? Wie sieht der entsprechende Code dazu aus?
Es muß daran liegen, das durch die Weiterverarbeitung automagisch das & in ein anderes Format gewandelt wird, aber wann und wann nicht?
Wie sieht die Weiterverarbeitung aus, wie der Code für die Ausgabe als HTML?
Mir ist klar, das ich etwas in der Luft hänge, weil ich keinen konkreten Fall vorweise, aber vielleicht kann mir einer einen Hinweis geben worauf ich da achten kann, wo ich suchen kann.
Hm, lasse dir doch mal zur Kontrolle in den einzelnen Schritten vom Einlesen des XML über die Weiterverarbeitung bis zur Ausgabe an den Browser den Inhalt der fraglichen Variable ausgeben, vielleicht siehst du da schon, an welcher Stelle das Problem liegen könnte. Ansonsten maskiere das "&" mal durch "&" statt durch "&" und kontrolliere die Verwendung von Single- und Double-Quotes.
Siechfred
Hi, Siechfred
Von Hand programmiert oder mit Hilfe eines Moduls? Wie sieht der entsprechende Code dazu aus?
Eigene von Hand geschriebene Module. Zu umfangreich um sie zu posten
Wie sieht die Weiterverarbeitung aus, wie der Code für die Ausgabe als HTML?
Ich trenne jenachdem maches per split auf oder auch mit substr und verarbeite dann weiter. PatternMatching ist mir einfach zu heftig.
Hm, lasse dir doch mal zur Kontrolle in den einzelnen Schritten vom Einlesen des XML über die Weiterverarbeitung bis zur Ausgabe an den Browser den Inhalt der fraglichen Variable ausgeben, vielleicht siehst du da schon, an welcher Stelle das Problem liegen könnte. Ansonsten maskiere das "&" mal durch "&" statt durch "&" und kontrolliere die Verwendung von Single- und Double-Quotes.
Das ist doch was, an den Stellen wo HTML-Code rauskommt kann ich gut & nehmen. Ich könnte dann die Daten, die aus XML ohne amp-Definition stammen grundsätzlich schonmal wandeln. Bei den XML-Ausgaben kann es Probleme geben, weil dort & nicht zwingend definiert ist.
Ich werde auch mal schauen, welche Rolle die Quotes spielen
Wenn ich Beispielsweise ein Attribut fülle, dann etwa so(Ausschnitt)
my $m = '<tag attribut="'.$parameter.'">';
Danke, ich glaube ich bekomme langsam ein Gefühl für das Problem.
Falls ich etwas Definitives finde und nicht wiedermal das Phänomen der Gleichzeitigkeit auftritt berichte ich.
Bis bald Bernd
Hi,
Ich könnte dann die Daten, die aus XML ohne amp-Definition stammen grundsätzlich schonmal wandeln.
Du *musst* Daten, die Du (selbst) aus XML heraus nimmst, einer XML-Dekodierung unterziehen. Immer.
my $m = '<tag attribut="'.$parameter.'">';
Du *musst* Daten, die Du (selbst) in einen XML-Kontext bringst, einer XML-Kodierung unterziehen. Immer.
Cheatah
Hi,
Bei den XML-Ausgaben kann es Probleme geben, weil dort & nicht zwingend definiert ist.
Wie schaffst Du es in Deinen XMLs, die in XML vordefinierte Entity & zu ent-definieren?
cu,
Andreas
Hi,
Auch in Attributen ist "&" ein Sonderzeichen.
mh, Es wird aber doch akzeptiert, bei dem frame-tag Attribut: src.
in welchem Element und in welchem Attribut ist nicht von Belang. Die Frage ist, _von wem_ es akzeptiert wird, und wie der Fall dort gelagert ist - wobei ich letzteres außer Acht lassen würde. "&" *ist* ein Sonderzeichen, selbst wenn es unter bestimmten Bedingungen nicht maskiert werden muss. Ich sehe keinen Grund, diese Fälle zu suchen und eine Maskierung zurück zu nehmen.
[...] der Inhalt des pfad-Tags in ein Scalar getan, dann möglicherweise weiterverarbeitet und schließlich zum Beispiel in ein frame-Tag-Attribut-src gefüllt oder in ein meta-tag zur Weiterleitung oder, oder oder... Der content wird dann zum Browser geschickt und der Browser fordert dann wohl eine falsche Resource an. Besser? :-)
Jupp. Damit ist nämlich klar, dass der jeweils erzeugte Code betrachtet werden muss. Ein Perl-Problem liegt nicht vor, unabhängig davon, ob die Problembehebung im Perl-Code stattfindet oder nicht.
Es muß daran liegen, das durch die Weiterverarbeitung automagisch das & in ein anderes Format gewandelt wird, aber wann und wann nicht?
Beim Auswerten des XML-Codes wird eine Demaskierung vorgenommen. Es verbleibt ein "&".
Programmiert habe ich diese Wandlung nicht. Sie tritt inzwischen nur noch selten auf, weil ich wohl diese Stellen entsprechend Versuch/Irrtum geändert habe.
Der Weg ist eigentlich sehr einfach: Wann immer Du einen Wert, egal welchen, in einen Kontext bringst, egal in welchen, muss dieser Wert kontextspezifisch kodiert werden. Wann immer Du ihn aus einem Kontext heraus holst, muss er dekodiert werden.
Cheatah
Hallo,
warum schreibst du das nicht in deinem alten Thread (der dazu passt)?!
wenn der Thread schon im Archiv ist, dann verlinke ihn das nächste mal bitte, weil hier aus deinem geschilderten Zusammenhang verstehe ich nur Bahnhof.
gruss
Hi,
warum schreibst du das nicht in deinem alten Thread (der dazu passt)?!
wenn der Thread schon im Archiv ist, dann verlinke ihn das nächste mal bitte, weil hier aus deinem geschilderten Zusammenhang verstehe ich nur Bahnhof.
Sobald ich Zeit finde, beschäftige ich mich näher mit den technischen Möglichkeiten dieses Forums. Entschuldige bitte ich war lange nicht online.
Bis bald Bernd
hi,
Sobald ich Zeit finde, beschäftige ich mich näher mit den technischen Möglichkeiten dieses Forums.
Um mit einer zur gleichen Thematik gehörenden Frage deinen anderen Thread fortzusetzen, musst du dich nicht groß mit "technischen Möglichkeiten" beschäftigen.
Höchstens mal die Charta lesen, die besagt dass Doppelpostings zu so nahe beieinanderliegenden Themenbereichen nicht erwünscht sind.
gruß,
wahsaga
Hi, wahsaga
Um mit einer zur gleichen Thematik gehörenden Frage deinen anderen Thread fortzusetzen, musst du dich nicht groß mit "technischen Möglichkeiten" beschäftigen.
Höchstens mal die Charta lesen, die besagt dass Doppelpostings zu so nahe beieinanderliegenden Themenbereichen nicht erwünscht sind.
Ich bin aber nicht der Meinung, das dies ein Doppelposting ist, weil der erste Teil sich mit der Gegebenheit auseinandersetz, was der Browser mit der Raute macht, während der zweite Teil sich mit einem Verarbeitungsproblem in Perl auseinandersetzt. Das sind für eindeutig zwei verschiedene Baustellen. Mein Thema war nicht: Was man alles so mit einer URL machen kann oder?
Danke durch deinen Beitrag kapiere ich en passant, wie das mit den Links funktioniert :-)
Bis bald Bernd
PS: Gaaaaanz schön heftig hier. Warum seid ihr so gereizt?
PS: Gaaaaanz schön heftig hier. Warum seid ihr so gereizt?
Das kommt dir nur so vor. Du gewöhnst dir mit der Zeit eine etwas schnoddrige Schriftsprache hier (oder auch in anderen Foren) an, das ist aber erstmal nicht persönlich.
Struppi.
hi,
Ich bin aber nicht der Meinung, das dies ein Doppelposting ist, weil der erste Teil sich mit der Gegebenheit auseinandersetz, was der Browser mit der Raute macht, während der zweite Teil sich mit einem Verarbeitungsproblem in Perl auseinandersetzt. Das sind für eindeutig zwei verschiedene Baustellen. Mein Thema war nicht: Was man alles so mit einer URL machen kann oder?
Im großen und ganzen ist dein Thema also "Was weiß ich noch alles _nicht_ über URLs, was mir an verschiedenen Stellen das Leben schwer macht".
PS: Gaaaaanz schön heftig hier. Warum seid ihr so gereizt?
Wir sind nicht gereizt, sondern bitten darum, einige allgemeine Regeln zu berücksichtigen.
Warum Doppelpostings unerwünscht sind und schaden, ist mehrfach im Archiv nachlesbar.
gruß,
wahsaga
Hi,wahsaga
Im großen und ganzen ist dein Thema also "Was weiß ich noch alles _nicht_ über URLs, was mir an verschiedenen Stellen das Leben schwer macht".
Ich gehe davon aus das hinter deinem Satz ein unsichtbarer Smiley ist.
Wir sind nicht gereizt, sondern bitten darum, einige allgemeine Regeln zu berücksichtigen.
Ok, ich mach mir die Mühe und suche im Archiv nach Doppelposting, obwohl ich nicht der Meinung bin, das ich eins mache. Und du machst dir die Mühe mal den Unterschied zwischen Perl-Interpreter und einem Browser aufzustellen ;-)
Bis bald Bernd
Hell-O!
Wenn ich eine Url mit Parametern als Inhalt in einem xml-tags verwnede muß ich das & maskieren
Ja, z.B. mit &.
/cgiPfad/perl.pl?parameter1=xyz&parameter2=daten#Anker
Ja, so notierst du die URL in deiner XML-Datei. Beim Aufruf derselben macht der Browser daraus:
/cgiPfad/perl.pl?parameter1=xyz¶meter2=daten#Anker
Wo ist also das Problem?
In Attributen scheint das nicht nötig zu sein, aber doch im Inhalt.
Es ist in beiden Fällen nötig, da sonst alles ab der *ersten* Raute als Anker angesehen wird. Mal zwei Beispiele:
/cgiPfad/perl.pl?parameter1=#¶meter2=daten#Anker
Der Anker dieser URL lautet "¶meter2=daten#Anker", weder für parameter1 noch parameter2 wird irgendein Wert übertragen. Der Ankersprung geht in die Hose, weil es den o.g. Anker nicht gibt. Dies ist übrigens auch so, wenn die Raute innerhalb des Parameternamens vorkommt.
/cgiPfad/perl.pl?parameter1=%23¶meter2=daten#Anker
Der Anker dieser URL lautet "Anker", die Parameter werden ordnungsgemäß übertragen, der Anker angesprungen, da er existiert.
Jetzt würde ich doch gern Wissen was dahinter steckt.
Ich hoffe, ich habe dein Problem richtig verstanden.
Siechfred
Hi,
Ich hoffe, ich habe dein Problem richtig verstanden.
Nicht ganz siehe Antwort auf Cheatas Beitrag
Bis bald Bernd
Wenn ich eine Url mit Parametern als Inhalt in einem xml-tags verwnede muß ich das & maskieren, Beispiel:
<pfad>
/cgiPfad/perl.pl?parameter1=xyz&parameter2=daten#Anker
</pfad>
Es geht ja um die Links, die im HTML code ausgegeben werden, wenn du hier das CGI Modul verwendest, macht es diese Dinge von ganz alleine und du brauchst dir darüber keinen Kopf zu machen.
use strict;
use CGI;
print CGI::a( {-href=> "/cgiPfad/perl.pl?parameter1=xyz¶meter2=daten#Anker"}, 'text');
Struppi.
Hi,
Es geht ja um die Links, die im HTML code ausgegeben werden, wenn du hier das CGI Modul verwendest, macht es diese Dinge von ganz alleine und du brauchst dir darüber keinen Kopf zu machen.
Für das, was ich mache, kann ich CGI nicht verwenden. Die Eingabedaten werden aus verschiedenen Dateien gelesen. Unter anderem auch aus nicht-XML-Dateien (parameterlisten etc.) als Ausgabe werden nicht nur Standard-HTML-Tags benötigt sondern auch eigene XML-Tags. CGI ist dazu nicht flexibel genug. Als Ausgabe werden mit bestimmten Codes bestückte HTM oder XML-Masken verwendet, die dann mit den ermittelten Daten befüllt werden. Teilweise schließt sich dann noch eine XSLT-transformation in der Browser-Ebene an. So erreiche ich beispielsweise eine konkrete Trennung von logischer Struktur des Dokuments, layoutmäßiger Form, Outfit, Textfluss und Stammdaten.
Meine Vermutung ist, das dies etwas mit der automagie der Zeichen zutun hat.
Bis bald Bernd
Es geht ja um die Links, die im HTML code ausgegeben werden, wenn du hier das CGI Modul verwendest, macht es diese Dinge von ganz alleine und du brauchst dir darüber keinen Kopf zu machen.
Für das, was ich mache, kann ich CGI nicht verwenden. Die Eingabedaten werden aus verschiedenen Dateien gelesen. Unter anderem auch aus nicht-XML-Dateien (parameterlisten etc.) als Ausgabe werden nicht nur Standard-HTML-Tags benötigt sondern auch eigene XML-Tags. CGI ist dazu nicht flexibel genug.
Bin ich nicht sicher ob es das nicht ist, aber du kannst auf jeden Fall die CGI Parameter auch "von Hand" mit CGI::escape( ); kodieren, in dem falle darfst du aber den Anker erst hinterher dran hängen.
Meine Vermutung ist, das dies etwas mit der automagie der Zeichen zutun hat.
du kannst dir ja mal den Quelltext von CGI::escape() anschauen, ich glaub da ist keine Magie.
Struppi.
Hi,
Meine Vermutung ist, das dies etwas mit der automagie der Zeichen zutun hat.
du kannst dir ja mal den Quelltext von CGI::escape() anschauen, ich glaub da ist keine Magie.
Hast du mich doch zum erneuten ansehen des CGI.pm gebracht. :-) Ich bin erstaunt was sich da alles getan hat. Aber mit escapeHTML ist doch automagie an vielen Stellen von CGI. Oder ich interpretiere Larry Walls automagisch noch zu einfach.
Er meint bestimmt eher die eingebauten Teile, die nicht sichtbar sind.
Erstmal schaue ich mir an und entscheide wie ich amp und 038 durch eine Quelle - Ziel Analyse der Daten in den Griff bekomme. Daraus wird sich dann schon mal eine bessere Struktur der Vorgehensweise ergeben und dabei prüfe ich die Quotes und achte mehr darauf das es auch Zeichen gibt die länger sind als ein Byte :-)
Also vielen Dank ich muß jetzt wieder hacken.
Bis bald Bernd
Hallo,
Wenn ich eine Url mit Parametern als Inhalt in einem xml-tags verwnede muß ich das & maskieren, Beispiel:
<pfad>
/cgiPfad/perl.pl?parameter1=xyz&parameter2=daten#Anker
</pfad>In Attributen scheint das nicht nötig zu sein, aber doch im Inhalt.
Beides kommmt auf die Definition des Inhaltstyps der Elemente bzw. der Attribute an. Dort musst Du nachsehen, ob character entities ersetzt werden oder nicht. Werden Sie ersetzt, dann würde ja der Parser
/cgiPfad/perl.pl?parameter1=xyz¶meter2
^hier den Beginn einer character entity vermuten und natürlich für ¶meter2 keine Zeichenentsprechung finden. Deshalb muss, wenn der Inhaltstyp (egal ob bei Element oder Attribut) aussagt, dass character entities ersetzt werden, statt des Zeichens "&" seine entity eingesetzt werden.
Andererseits heißt das aber auch, dass nach der Behandlung durch den Parser keine character entities mehr vorhanden sind, weil diese ja durch ihre Zeichenentsprechungen ersetzt wurden.
/cgiPfad/perl.pl?parameter1=xyz&parameter2=daten
kommt also bei Anwendungen außerhalb des Browsers als
/cgiPfad/perl.pl?parameter1=xyz¶meter2=daten
an.
Schreibt der Datentyp aber keine Ersetzung von character entities vor, wie z.B. bei CDATA-Sections in XML oder XHTML, dann _darfst_ Du dort auch keine entities einsetzen, weil diese dann eben nicht ersetzt werden.
Bei HTML und XHTML werden per Definition für Inhaltstypen PCDATA und CDATA character entities ersetzt. In allen Elementen und Attributen mit diesem Inhaltstyp darf deshalb das Zeichen "&" nur als Beginn einer character entity vorkommen.
viele Grüße
Axel