2010-01-13 9 views
5

Mein Problem ist das folgende. Ich habe eine XHTML 1.1 Seite, die ein Formular und Eingabefelder hat. Eines der Eingabefelder enthält einen Wert, der ein URI ist. Dieser URI enthält Schlüssel/Wert-Paare mit einem kaufmännischen Und (&) als Argumenttrennzeichen, das als GET-Anforderung von einer anderen Webanwendung im Browser übergeben wird.How-to XHTML 1.1 validieren ein kaufmännisches Und, ohne es zu entkommen?

Normalerweise würde ich die Entität & verwenden, um die Et-Zeichen zu erstellen, um den Code als XHTML 1.1 zu validieren. Mein Problem hier ist, dass die Anwendung die GET-Anfrage nicht erhält, da (wie erwartet) der Browser nicht versteht, wie man & in der URI behandelt.

Also meine Frage ist wirklich, wie man ein kaufmännisches Und ohne die HTML-Entität schreiben, so dass der Browser es immer noch als Argument Trennzeichen erkennt und die GET-Anfrage ordnungsgemäß an die Web-App weitergeleitet wird.

Ich versuchte Hex (% 26), das kaufmännische Und-Zeichen zu kodieren, aber der Browser "übersetzt" es immer noch nicht in ein richtiges & Zeichen.

Eine verwandte Frage, aber es bietet keine genaue Antwort auf die Frage Ich frage:

XHTML and & (Ampersand) encoding

+2

"(wie erwartet) der Browser nicht versteht, wie' zu ​​handhaben & 'in der URI" - das ist ** nicht ** wie erwartet Sie sollte '&' nicht in der Adressleiste angezeigt werden, es sei denn, Sie haben es doppelt codiert. –

+0

Bitte lesen Sie die Frage noch einmal. Die Ampersands sind Teil eines URI, der im Wertfeld eines Inputs enthalten ist. Nachdem das Formular abgeschickt wurde, wird der Benutzer an den gleichen Ort zurückgeschickt, so wie er geschrieben wurde. Das bedeutet, dass ich entweder die Und-Zeichen nicht-codiert belasse, aber die Validierung versage, oder ich kodiere sie mit dem Problem, dass der Browser die HTML-Entität in der Adressleiste erhält und die Abfrage-Zeichenfolge nicht an die nächste App im Prozess weitergibt. –

+1

Der Browser sollte die '&' nach '&' dekodieren, wenn das HTML in ein DOM konvertiert wird. Es sollte dann das '&' als '% 26' codieren, wenn die URL oder x-url-form-codierte Daten erstellt werden. Wenn es nicht funktioniert, vermute ich, dass Sie die Daten auf dem Server falsch behandeln. – Quentin

Antwort

0

ich nicht mehr Zeit auf diese stören könnte zu verbringen.Ich änderte einfach das Argument Separator auch Semikolon (;) aufnehmen, so kann ich es anstelle von Et-Zeichen:

#cat .htaccess 
php_value arg_separator.input "&;" 
1

Es gibt keine Möglichkeit, ein Zeichen-Zeichen in einem Attributwert enthalten, ohne eine Einheit verwendet wird.

Es gibt keine Möglichkeit, ein kaufmännisches Und-Zeichen als textNode einzuschließen, ohne ein Entity oder CDATA-Marker zu verwenden (aber ich wette, dass Sie als Text/HTML dienen, so dass Sie diese nicht verwenden können).

Das heißt - jeder Browser, der die Entität nicht entschlüsseln kann, ist defekt. Kein Mainstream-Browser schlägt dort fehl. Sie verwenden entweder einen obskuren oder kaputten Browser oder das Problem wird falsch diagnostiziert.

+0

Jeder große Browser (IE oder FF). Der Browser übernimmt die Dekodierung im HTML-Code. Ich beziehe mich darauf, die HTML-Entität tatsächlich in der Adressleiste zu verwenden. Probieren Sie es aus ... –

+2

Tu das nicht! Sie geben einfache URLs in die Adressleiste ein, keine HTML-codierten URLs. Das ist wie das Öffnen eines Microsoft Word-Dokuments in Notepad. – Quentin

+0

Der Browser wird zu diesem URI umgeleitet, da er direkt in die Adresszeile eingegeben wurde, einschließlich HTML-Entitäten. Das ist mein Problem. –

0

Ohne den Code ist es schwierig zu sagen, wo Sie diese Informationen behalten möchten, wenn Sie den Code veröffentlichen könnten, könnten wir das Problem besser verstehen.

Eine mögliche (wenn dies in der Tat ist das, was Sie konfrontiert sind) ist es, die Elemente in der Abfragezeichenfolgeflag in andere Formularelemente zu bewegen, wie:

<form action="example.com/?foo=1&bar=2> 
    <!-- ... --> 
</form> 

zu:

<form action="example.com"> 
    <input type="hidden" name="foo" value="1" /> 
    <input type="hidden" name="bar" value="2" /> 
    <!-- ... --> 
</form> 
+0

Der Querystring befindet sich nicht in der eigentlichen Formularaktion, sondern im Wertfeld eines Eingabefelds.Es ist ein Wert, der an eine Webanwendung übergeben wird, die später den Browser des Benutzers an denselben URI zurückgibt (mit der darin enthaltenen Abfragezeichenfolge). Dies schlägt fehl, da der Browser die HTML-Entität in der Adressleiste nicht verstehen kann. –

+0

Gotcha, mein Schlechter. Wenn das der Fall ist, können Sie es nicht einfach umgehen, wenn Sie es in das Eingabefeld stecken (was wahrscheinlich am besten ist, um XSS-Attacken zu vermeiden) und es dann wieder entschlüsseln, bevor Sie die Server-Seite umleiten? – mynameiscoffey

+0

Leider stammt die Weiterleitung von einer dritten Partei. Also muss ich die URI genau so senden, wie ich sie brauche, um zurück zu kommen ... die dritte Partei empfängt sie einfach und gibt den Browser des Benutzers zurück, nachdem sie andere Arbeit geleistet hat. –

1

Wie In der anderen Frage, auf die Sie verwiesen haben, konvertiert der Browser die &amp; in &, wenn die Seite verarbeitet wird, so dass die "&" (nicht &amp;) an den Server in der GET-Anfrage gesendet werden sollte. Möglicherweise verwenden Sie Ajax, um die GET-Anforderung zu stellen. In diesem Fall müssen Sie möglicherweise den HTML-Code dekodieren. Die Entität wird für XHTML benötigt - keine alternative Kodierung, nur sicherstellen, dass sie richtig dekodiert ist.

Referenz: The & changes to &amp; in a hyperlink

+0

Das Problem besteht darin, dass der Browser die HTML-Entität direkt in der Adressleiste empfängt (als ob sie direkt eingegeben wurde). Ich beziehe mich nicht auf die Decodierung, die automatisch geschieht, z. wenn Sie die kaufmännische Und-Entität innerhalb eines Ankers verwenden. –

+0

Wie wird der URI in das Eingabefeld geschrieben? Wenn der Wert Teil des HTML ist, sollte es der Entitätsname sein, wenn er mit JavaScript gesetzt wird, sollte es nicht sein. –

1

Die entkam & sollte durch den Client (Browser) überall im XHTML-Dokument konvertiert werden.

Sie also sollte entkommen jeder & mit &amp;

Verwandte Themen