Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

JavaScript und &reg per GET

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 26.08.2009, 10:34

Hallo zusammen,

ich glaube ich bin zu doof für JavaScript und bräuchte daher mal etwas Hilfe.

Folgendes:
Ich habe eine Suchfunktion die sich je nach Auswahl der Felder selber neu lädt, soweit so gut, das geht auch alles mit einer Ausnahme.

Es gibt bei mir eine Variable die als $reg benannt ist und genau hier liegt das Problem.

Führe ich die Weiterleitung als

Code: Alles auswählen

window.location.href = "/suche.php?o=o&reg=123";
aus, so funktioniert das in allen Browsern, nicht aber im IE 6 und 7

Beide machen mir aus dem &reg jedes mal ein (r), also ein eigentliches ®

Soweit ok, nun hatte ich das ganze dann als & versucht, also

Code: Alles auswählen

window.location.href = "/suche.php?o=o&reg=123";
und siehe da, die beiden IE haben keine Probleme mehr.
Nur jetzt gehen alle anderen Browser nicht mehr!

escape, encodeURI und encodeURIComponent hatte ich auch schon versucht, jedoch ohne Erfolg.

Hat einer einen Tipp für mich wie man das machen kann / muss, damit der IE nicht immer aus dem &reg in der URL ein (r) macht. (zumal das meiner Meinung nach auch falsch ist) ??

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


bloddy newbie
PostRank 4
PostRank 4
Beiträge: 171
Registriert: 18.05.2006, 20:15

Beitrag von bloddy newbie » 26.08.2009, 11:05

Sofern du Zugriff auf die php.ini hast, stelle dort ein (arg_separator-Direktive), dass als Trennzeichen für GET-Parameter das Semikolon ";" akzeptiert wird. Eventuell ist es auch bereits eingestellt. Dies wird übrigens von w3.org empfohlen: https://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2

Grüße BN

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 26.08.2009, 11:54

Danke für Deine Antwort!

Allerdings bin ich nun noch nicht ganz schlau geworden. W3C empfiehlt also das Verwenden von ; als Separator. PHP hingegen sagt das dazu
Unfortunately most user agents do not send form data in this semi-colon separated format. A more portable way around this is to use & instead of & as the separator.
Sprich, ich soll die Daten als & übertragen. Dann hat aber alle anderen Browser außer IE 6 und 7 ein Problem. Und, das auch nur über das JavaScript und auch nur mit dem einen Parameter. Alles andere, egal wie, wo und was geht, nur dieses "&reg=xx" nicht.

Daher denke ich irgendwie dass es nicht an dem Separator liegt, oder doch? EInfach so testen geht leider nicht, da muss ich mir schon sicher sein. Ist ein Produktiv-System bei dem vieles beeinträchtigt werden könnte.

Mir scheint es so, als ob das JavaScript aus dem & ein & macht. Das würde erklären warum z.B. der FF dann in der URL ein & anzeigt. (der IE aber nicht)

Im Gegensatz wird aus einem &reg nach der Weiterleitung ein ® im IE, nicht aber in den anderen Browsern.

Hm, und nun gleich ein Nachtrag:
Habe das ganze nun auch ohne PHP versucht, also eine normale html Seite mit nur einem Link der beim Klicken weitergeleitet wird. Und es ist genau das gleiche Spiel. Der Test erfolgte diesmal auf zwei Systemen, einer mit PHP aber ohne Verwendung, das andere gänzlich ohne PHP-Installation.

Ohne amp:
window.location.href = "/test.html?o=o&reg=123";
FF: wird in der URL /test.html?o=o&reg=123 (richtig)
IE: wird in der URL /test.html?o=o®=123 (falsch)

Mit amp:
window.location.href = "/test.html?o=o&reg=123";
FF: wird in der URL /test.html?o=o&reg=123 (falsch)
IE: wird in der URL /test.html?o=o&reg=123 (richtig)

DanielS
PostRank 9
PostRank 9
Beiträge: 1179
Registriert: 03.08.2008, 08:45

Beitrag von DanielS » 26.08.2009, 12:00

Was wäre denn, wenn Du "reg" und "o" vertauscht, also:

Code: Alles auswählen

window.location.href = "/test.html?reg=123&o=o"; 

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 26.08.2009, 12:14

Hi DanielS,

wenn ich die beiden vertausche, also ?reg=xxx verwende funktioniert es.

Aber das zu vertauschen ist nicht möglich, da der Wert nicht immer vorhanden ist, der "o" jedoch schon. So müsste ich auch noch immer prüfen ob nun ein & oder ein ? gesetzt werden muss, das wollte ich eigentlich nicht. Die genannte URI ist nur ein Beispiel gewesen, da kommen noch bis zu 8 Parameter hinzu, je nachdem was in der Suche ausgewählt wurde.

Nachtrag:
also eigentlich sind es ja zwei Probleme wie ich sehe. Einmal das &reg das der IE falsch interpretiert und zum anderen das & das der FF falsch macht. Und so wie es aussieht bin ich mit dem & im FF auch nicht der einzigste:
https://forums.mozillazine.org/viewtopi ... 8&t=114786
https://www.joomlaportal.de/allgemeine- ... on-zu.html

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 05.09.2009, 11:22

Ganz grundsätzlich:
Das Problem mit & betrifft nur HTML, nicht jedoch Javascript, denn & ist in HTML ein reserviertes Zeichen, das auf der untersten Ebene, bei der Dekodierung der Bytes, verwendet wird.

Von Seiten Javascript müsste es daher bla?a=1&b=2 lauten. Schreibst du diesen Javascript-Code allerdings im HTML-Bereich, müsste es bla?a=1&b=2 sein, allerdings kommt es hier wiederum darauf an, wo genau du diesen Code unterbringst; in einem onIrgendwas-Attribut (<a &#8230; onclick= usw.) müsste das Und definitiv durch & ersetzt werden, schreibst du es in einem CDATA-Bereich, dann nicht. <script> ohne CDATA liegt wohl irgendwo dazwischen.
Und das alles bringt dir nix, wenn die Browser sich unterschiedlich verhalten.

Mein erster Ansatz wäre daher, den betreffenden Javascript-Code in eine eigene Datei auszulagern, so dass der Browser gar nicht erst in Versuchung gerät, die Bytes HTML-mäßig zu dekodieren.

Ich täte es rein spaßeshalber auch mal mit CDATA versuchen, nur um zu sehen, was dann passiert. Verlassen würde ich mich darauf jedoch nicht, gerade, wenn's um die uralten IEs geht.

Du hast dich noch nicht so recht dazu geäußert, ob du nicht statt des Und das Semikolon als Parametertrenner verwenden kannst. Ich weiß nicht, wo du den Auszug aus der PHP-Anleitung her hast, der sich für & ausspricht, und in welchem Zusammenhang er steht, aber das betrifft dich nicht, denn du stellst die URL selbst zusammen und wertest sie auch selbst aus. Davon abgesehen kann PHP mit der Einstellung arg_separator = ";&" beide Trennzeichen auswerten. Insofern sehe ich das Problem nicht, das die PHP-Leute ausgemacht zu haben glauben.
Das Semikolon halte ich für die beste Lösung.

Last but not least eine ganz simple Methode, die die Ursache zwar nicht beseitigt, aber den problematischen Weg etwas umschifft: Benenne den Parameter reg um, verwende stattdessen einen Namen, der nicht als HTML-Maske verwendet wird.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag