Re: @CB: Re: Umlaute in URL - Fehlereingrenzung - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Jurenda (305 Beiträge) am Freitag, 25.Oktober.2002, 11:25.
    Re: @CB: Re: Umlaute in URL - Fehlereingrenzung

      Ich bin in irgend einem Perl-Modul aus CPAN über genau diese Zeichen nur %, \, |, &, ", + und Space gestolpert.

      Hm, werd halt auch schon alt und senil ;-)

      Hab vergessen welches.

      Werd mal auf die Suche gehen, dann ich glaub da war auch was von RFC's dabei :-)

      Bei Erfolg gibts Meldung.

      Grüße Jurenda :-})


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Jürgen (614 Beiträge) am Sonntag, 20.Oktober.2002, 20:29.
    Umlaute in URL

     Antworten

    Beitrag von Jürge (2 Beiträge) am Sonntag, 20.Oktober.2002, 21:10.
    Re: Umlaute in URL

      Hi BP Freak's,

      habe in Perl etwas rumgebastelt - erschlage das ganze jetzt mit Linkübergabe ae, oe oder ue.
      Perlcode:

      <perl>
      if ($BranchenID2 eq "ae")
      {
      $BranchenID2 = "Ä";
      }
      if ($BranchenID2 eq "oe")
      {
      $BranchenID2 = "Ö";
      }
      if ($BranchenID2 eq "ue")
      {
      $BranchenID2 = "Ü";
      }
      </perl>
      

      Das kann man sicher vereinfachen, aber wie??. Bin Perl newbie.
      Wer einen Tipp hat - nur her damit - bin ganz gierig drauf :-))

      Gruß
      Jürgen

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 23.Oktober.2002, 17:17.
    Re: Umlaute in URL

      Komisch, ich bilde mir ein, Dir darauf schonmal geantwortet zu haben, kann diese Antwort aber nich finden... Seltsam... Aber egal, hier nochmal: ;-)

      Umlaute darf man in URLs eigentlich nich verwenden, deshalb ist Deine Ersetzung schon garnich so schlecht. Allerdings haben sich die WWW-Erfinder darüber schon Gedanken gemacht und die Standardlösung sieht so aus:

      Ä = %C4
      ä = %E4
      Ö = %D6
      ö = %F6
      Ü = %DC
      ü = %FC
      ß = %DF

      Du brauchst dann im Template gar keine Umwandlung mehr, sondern musst in der URL einfach die obigen Zeichen verwenden also z.b.

      ....&Name=Schr%F6der

      Bin mir nich ganz sicher, aber ich glaube die baseportal-Routine "convert_url" macht das automatisch, musste Dir mal in der Doku anschauen ,-)

     Antworten

    Beitrag von Sander (8133 Beiträge) am Mittwoch, 23.Oktober.2002, 17:28.
    Re: Umlaute in URL

      nö... das fehlt
      convert_url Wandelt %, \, |, &, ", + in den entsprechenden %xx-Code, sowie das Leerzeichen in ein +

      Sander

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 23.Oktober.2002, 17:38.
    Re: Umlaute in URL

      Mmh, weisst Du grad wie der entsprechende substitute-Befehl aussähe? Oder anders: Welche Zeichen müssen denn alle in %xx gewandelt werden? Alle ausser \w ??

     Antworten

    Beitrag von Sander (8133 Beiträge) am Mittwoch, 23.Oktober.2002, 18:31.
    Re: Umlaute in URL

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 24.Oktober.2002, 03:19.
    Re: Umlaute in URL

      Danke, Du weisst wieder mal alles ;-))

      Wobei die Antworten & Codes da drin schon reichlich merkwürdig sind (und teils falsch) - aber letztendlich hab ich rausgefunden was ich gesucht hab: Es ist \W ;-)

      -> jetzt konvertiert convert_url alles ausser \w... ;-)

     Antworten

    Beitrag von Jurenda (305 Beiträge) am Donnerstag, 24.Oktober.2002, 08:59.
    Re: Umlaute in URL - hast' da was verstellt ? :-(

      Hallo Christoph:

      Hast Du da zu viel geändert?

      Schon so gegen 02:30 ist mir das aufgefallen, aber ich bin dann ins Bett ;-)

      Bei einigen Seiten ist $htx plötzlich sehr seltsam verbogen:

      htx=%2favjwien%2fkidscup%2fanmeldung

      Die verschiedensten Zeichen wie / . und so weiter werden plötzlich im URL als %xx dargestellt.
      Auch in der bp-Oberfläche sind manchmal diese Zeichen im URL ersetzt.

      Ich hab den Effekt ja schon mal beobachtet (so 2 mal im Monat) und dachte daß es ein IE-Problem ist. Aber so häufig (betrifft nur baseportal so alle 5 von 10 Seiten) ist das noch nie aufgetreten.

      Kannst Du Dir das bitte anschaun? Vielleicht triffts ja eh nur mich und ich muß meine Kiste entsorgen ;-(

      Herzliche Grüße von Jurenda :-})

     Antworten

    Beitrag von Jurenda (305 Beiträge) am Donnerstag, 24.Oktober.2002, 09:14.
    @CB: Re: Umlaute in URL - Fehlereingrenzung

      Hallo Christoph:

      Ich kann den Fehler eingrenzen:

      Immer wenn ein Formular abgeschickt wird sind die Sonderzeichen sichtbar.

      Und zwar genau dann, wenn das Formular mit form() erzeugt worden ist, dann ist die erzielte URL durcheinander.

      Herzliche Grüße von Jurenda :-})

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 24.Oktober.2002, 17:09.
    Re: @CB: Re: Umlaute in URL - Fehlereingrenzung

      Na, ich dachte mir schon, dass das irgendwas durcheinander bringt... :-(

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 24.Oktober.2002, 23:09.
    Re: @CB: Re: Umlaute in URL - Fehlereingrenzung

      Hast Du mal ne Beispielseite? Ich wollts jetzt nachvollziehen kanns aber nich genau... Bis jetzt scheints auch sonst noch niemand gestört zu haben ;-)

     Antworten

    Beitrag von Jurenda (305 Beiträge) am Freitag, 25.Oktober.2002, 03:22.
    Re: @CB: Re: Umlaute in URL - Fehlereingrenzung

      Beispiel? Gerne - die gesamte baseportal-Oberfläche ;-)

      Zum Nachvollziehen: log dich ganz einfach als User ein.
      Mache irgend etwas, wo Du ein Formular (<form>...) ausfüllst und schicke es ab. Und nun schau Dir die sid= im URL an. Da gibts plötzlich %XX anstelle von Punkten (.)

      Nochmal ganz langsam ;-)

      1) Startseite von baseportal http://baseportal.de
      2) Username in Feld Name: eingeben
      3) Passwort in Feld Passwort: eingeben
      4) Anmelden betätigen
      5) Neu erstellen Seite anwählen
      6) zyx_test in das Feld Name: eingeben
      7) Abschicken betätigen
      8) JETZT schau Dir die URL oben im Browserfenster an!
      *) sieht doch komisch aus, oder?
      *) ab dem ? gibts keine / und . mehr

      Bin nur deshalb drübergestolpert, weil ich in einer Userverwaltung über $_HTTP_REFERER auf die bp-Url zugreife und mein Programm plötzlich nichts mehr damit anfangen konnte :-(

      Herzliche Grüße von Jurenda :-})

      PS.: bei do_all kommts auch irgend wo mal zu Tage.
      Dass es noch niemand gestört hat, liegt wahrscheinlich daran, daß bp eingangsseitig derartige %xx-Codes automatisch wieder zurückwandelt.

      Ich denke mal, daß convert_url die speziellen Zeichen %, \, |, &, ", + und Space umwandeln soll und die anderen Zeichen unter 128 unberührt lassen sollte. Oberhalb von 127 kann es von mir aus reihenweise %xx erzeugen.
      Zu den bestehenden Ersetzungen könnte man zufügen:
      < $m =~ s/([\x80-\xff])/sprintf( "%%%02x", ord($1) )/ge;
      

      Apropos &: Mehrere Parameter in der Url werden durch & getrennt: Oder durch %26 oder durch & ... Wann muß ich was hinschreiben (in <a href=...) und wie heißts im folgenden Beispiel richtig
        baseportal.pl?htx=test&name=Mayer&Co&jahre=2002
      
      etwa so:
        baseportal.pl?htx=test&name=Mayer%26Co&jahre=2002
      Dann ist ja convert_url gar nicht so einfach einzusezten!

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 25.Oktober.2002, 09:50.
    Re: @CB: Re: Umlaute in URL - Fehlereingrenzung

      Hehe, wie immer detailliert bis ins Feinste ;-)

      Ist mir noch garnicht aufgefallen, dass das in der kompletten bp-Oberfläche so ist...

      Klar wandelt bp alles mit %xx wieder in die richtigen Zeichen zurück, das ist ja schliesslich RFC-Standard. Insofern ist also eigentlich alles ok, oder? ,-)

      Unklar ist mir, ob es eindeutige Standards gibt (Sander, weisst Du da was?), welche Zeichen man nun genau encoden sollte/darf - ob _alle_ auch ok ist (wenn auch teils a bisserl unschön), oder ob nur %, \, |, &, ", + und Space an sich richtig ist... Dein Vorschlag mit alles über 128 scheint mir sinnvoll, aber am Besten wärs den "offiziellen Standard" zu befolgen, so es denn einen gibt... Mmmmmmmmmmmmhhhhhh....

      Zur Frage:

      a) baseportal.pl?htx=test&name=Mayer&Co&jahre=2002

      b) baseportal.pl?htx=test&name=Mayer%26Co&jahre=2002

      ist natürlich b) richtig, weil a) in $name -> "Mayer" liefern würde... Genau für solche Fälle st das %26 Escape ja da ;-)

      Doch, convert_url ist schon einfach einzusetzen, weil man nicht einfach die komplette URL da durchschicken darf, sondern immer nur die Namen und Werte einzeln, also z.b. so:

      "...baseportal.pl?htx=test&name=".convert_url($name)."&..."

      ;-)

     Antworten

    Beitrag von Jurenda (305 Beiträge) am Freitag, 25.Oktober.2002, 11:25.
    Re: @CB: Re: Umlaute in URL - Fehlereingrenzung

      Ich bin in irgend einem Perl-Modul aus CPAN über genau diese Zeichen nur %, \, |, &, ", + und Space gestolpert.

      Hm, werd halt auch schon alt und senil ;-)

      Hab vergessen welches.

      Werd mal auf die Suche gehen, dann ich glaub da war auch was von RFC's dabei :-)

      Bei Erfolg gibts Meldung.

      Grüße Jurenda :-})

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 25.Oktober.2002, 12:47.
    Re: @CB: Re: Umlaute in URL - Fehlereingrenzung

      Wann schläfst Du eigentlich? ,-)

     Antworten

    Beitrag von Jurenda (305 Beiträge) am Freitag, 25.Oktober.2002, 16:13.
    Re: @CB: Re: Umlaute in URL - Fehlereingrenzung

      Schlafen - was ist das ;-)
      Na, dann ganz am Schluß ;-(
      Äh, und Du?

      Hier mal meine Suchergebnisse (und mehr):

      Babylon läßt grüßen ... und vor allem eine verständliche RFC (ist selten!).

      Im CPAN wird angegeben daß URI::URL:: auf dem RFC1738 (Uniform Resource Locators) basiert.
      Mittlerweile ist die RFC1738 ersetzt worden durch die RFC2396.

      URI::URL:: in Verbindung mit URI:: basiert auf der RFC2396 und der Aktualisierung auf IPv6 durch RFC2732.

      Wer sich genauer dafür interessiert (schneller s.u.) dem empfehle ich das 2. Kapitel der RFC2396 zu überfliegen.
      Dieses ist sehr gut geschrieben und gibt einen guten Einblick auf das WARUM so schwierig ;-)

      http://www.armware.dk/RFC/rfc/rfc2396.html
      http://www.armware.dk/RFC/rfc/rfc2732.html

      Kernstück der Problematik ist die in einem vorherigen Posting angesprochene Frage wann ich escapen muß und wann ich nicht darf.
      Zum Beispiel darf ich die & zwischen meinen Parametern nicht ersetzen, innerhalb muß ich sie ersetzen!
      Und das ich das # immer ersetzen muß, außer, ich gebe am Ende der URL einen Anker-Verweis an!
      Und so weiter...

      Für das ganze gibts sogar ein vorgefertigtes Modul URI::Escape::
      Die Beschreibung ist SEHR LESENSWERT!

      http://search.cpan.org/author/GAAS/URI-1.22/URI/Escape.pm

      Wer es kompletter haben will, der kann das Modul URI::URL:: verwenden:

      http://search.cpan.org/author/GAAS/URI-1.22/URI/URL.pm

      Für baseportal würde ich eine Erweiterung von convert_url() in der folgenden Form vorschlagen (sofern nicht sowieso auf die oben erwähnten Module zurückgegriffen wird):

      # das gibt Geschwindigkeit (aus URI::Escape:: entnommen)  hmmmm .... ob ein Array - $_urlescap[ord($_)] - nicht noch schneller ist?
      for (0..255) {
          $_urlescapes{chr($_)} = sprintf("%%%02X", $_);
      }
      

      sub convert_url(;$;@) {

              local $_=@_>0?shift:$_;  # Achtung: geändert ;-)
      

              s/([\x00-\x1f%\\\|&"\+\x7f-\xff])/$_urlescapes{$1}/g;
      #       s/([^A-Za-z0-9\-_.!~*'() ])/$_urlescapes{$1}/g; hmmmm .... diese Variante wäre zwar korrekter, aber da schaut dann htx=... so seltsam aus :-(
      
              if (@_) {                 my $_cu = $_                 for (@_) { s/([^A-Za-z0-9\-_.!~*'() ])/$_urlescapes{$1}/g; # um ' ' erweitert!                 my $_an;                 $_an = '#'.pop if @_/2>0;                 while (@_) { $_cu.='&'.shift.'='.shift }                 $_ = $_cu.$_an;         }         s/ /+/g;
              $_; } # hmmm ... hoffentlich stimmt überall die Syntax!

      Somit gibts für convert_url folgende Verwendung (LIST2 bezeichnet eine Liste mit geradzahliger Anzahl von Elementen):

         convert_url
         convert_url EXPR
         convert_url EXPR, LIST2
         convert_url EXPR, LIST2, EXPR1
      


      Die ersten beiden Fälle sind convert_url wie bisher :-)
      Fall drei und vier hängen den Inhalt von LIST2 paarweise an EXPR in der Form &Element1=Element2 hinten dran.
      Im 4. Fall (ungerade Anzahl von Elementen hinter EXPR) fügt das letzte Element (EXPR1) als Anker (mit #) hinten dran.

      Für baseportal ergibt sich so die Möglichkeit, Links folgendermaßen zu erzeugen:

      $htx = '/main';
      $u = 'direkt#1';
      $name = 'Mc.Donald & Co';
      

      $lnk = '/baseportal'.convert_url($htx, 'u', $u, 'name', $name, 'Abschnitt2');

      # $lnk enthält nun: /baseportal/main&u=direkt%231&name=Mc.Donald+%26+Co#Abschnitt2
      


      Herzliche Grüße von Jurenda :-})


      PS.: Bin bei der Suche auch noch über einiges zu convert_html gestolpert:

      A) Found in HTML::Stream::

      my %Escape = (
          '&'    => 'amp',
          '>'    => 'gt',
          '<'    => 'lt',
          '"'    => 'quot',
      
      );
      sub escape_all {
          my $text = shift;
          $text =~ s/([<>"&])/\&$Escape{$1};/mg;
          $text =~ s/([\x80-\xFF])/'&#'.unpack('C',$1).';'/eg;
          $text;
      }
      

      B) more complex in HTML::Entities::

     Antworten

    Beitrag von Jurenda (305 Beiträge) am Freitag, 25.Oktober.2002, 16:36.
    Re: @CB: Re: Umlaute in URL - Lösung aber Tippfehler

      *grrr* tippfehler passiert:

      Die beiden Zeilen:

      my $_cu = $_
      for (@_) { s/([^A-Za-z0-9\-_.!~*'() ])/$_urlescapes{$1}/g; # um ' ' erweitert!
      

      sollten heißen:

      my $_cu = $_;
      local @_=@_;
      for (@_) { s/([^A-Za-z0-9\-_.!~*'() ])/$_urlescapes{$1}/g; } # um ' ' erweitert!
      

      Übrigens: funktioniert ganz gut!

      Herzliche Grüße von Jurenda :-})

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 25.Oktober.2002, 20:16.
    Re: @CB: Re: Umlaute in URL - Fehlereingrenzung

      Wieder mal erschlagende Fülle ;-)

      Das RFC is klasse, prima erklärt und steht auch genau das drin was es braucht - welche Zeichen nicht escaped werden sollen und das sind: Buchstaben, Ziffern und -", "_", ".", "!", "~", "*", "'", "(", ")"...

      Mmh, also dass der vorbelegte Hash wirklich was bringen soll - ich weiss nicht - immerhin muss man ja 255 Zeichen vorbelegen und dann is nichmal sicher dass convert_url benutzt wird etc.

      Und: Was mögen die Leute eigentlich an \w bzw. \W nicht? ;-)

      s/([^\w\-.!~*'() ])/'%'.unpack("H2",$1)/eg;

      is doch kürzer ;-)

      Die Anker-Erweiterung find ich overdone - das kann man grade noch selber mit "#anker" dazufügen, so mans denn braucht ;-)

      Ansonsten natürlich eine prima Idee, die's in bp (natürlich ;-) ) schon gibt und noch n bisschen bequemer is:

      link("name", "u", "bla=blubb");

      erzeugt auch noch gleich das http://baseportal... vorne dran - is aber glaub ich nich freigegeben ;-)

      Hab convert_url in der laufenden Version wieder zurück gestellt - is dann doch ein grösseres Thema und sollte in die nächste Version einfliessen...

     Antworten


     
 Liste der Einträge von 43051 bis 43201:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.06s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!