steffen: Erlaubte zeichen im IMG Tag

Hallo Forumleser,

ich hab ein Uploadscript geschrieben mit dem die User Bilder hochladen können und diese umbenennen können.

Da der browser manche Zeichen nicht akzeptiert, müßte ich wissen, welche das genau sind. Hab jetzt rausbekommen, dass % im Dateinamen zwar sein darf, aber wenn ich sie mit <img src="./bild%bla.jpg"> ausgebe, zeigt er mir nichts an.

Gibts da sowas wie urlencode, wo ich einfach anwenden kann?
Gibt es eine Tabelle, `in der alle erlaubte Zeichen stehen?

Steffen

  1. Hallo,

    ich hab ein Uploadscript geschrieben mit dem die User Bilder hochladen können und diese umbenennen können.

    gut, aber warum stellst du die Anfrage dann im Themenbereich HTML/XHTML? Das Script fällt doch dann eher in den Bereich PHP oder vielleicht Perl.

    Da der browser manche Zeichen nicht akzeptiert, müßte ich wissen, welche das genau sind.

    Warum? Gehe einfach mal davon aus, dass der Browser unzulässige Zeichen schon entsprechend codiert oder zurückweist. Dein Script bekommt also einen fertig codierten Namen.

    Gibts da sowas wie urlencode, wo ich einfach anwenden kann?

    Du willst doch vermutlich eher _de_codieren? Aber vermutlich brauchst du das gar nicht, da z.B. PHP diese Codierungen teilweise schon selbständig wieder decodiert, bevor dein Script die Parameter sieht.

    So long,
     Martin

    --
    Der Alptraum jedes Computers:
    "Mir war, als hätte ich gerade eine 2 gesehen."
    1. Hallo Martin,

      also ich hab zBN ein input Feld für den Namen. Wenn ich nun mache

      rename("/tmp/tmp_file.jpg", $_POST['eingabe']);

      und der User "A/B Wandler" zB eingibt funktioniert es 1 nicht wegen dem / dann dachte ich mir änderst den / in % um, aber dann zeig er mir das bild per <img src="./test/A%B Wandler.jpg"> nicht an.

      So deshalb hab ich es ins HTML getan, weil ich eigentlich nur eine Tabelle brauche um rauszufinden, wie ich die ganzen Sonderzeichen selbst codiere, oder es eine Funktion gibt, die das ganze für mich codiert.

      Das ich es beim ausgeben selbstverstädnlich auch decodieren muss ist klar.

      mfg steffen

      1. Hallo,

        also ich hab zBN ein input Feld für den Namen. [...]
        und der User "A/B Wandler" zB eingibt ...

        dann bekommst du diesen Namen fix und fertig URL-codiert als "A%2FB%20Wandler". Und den musst du nun höchstens wieder decodieren, wenn du für die Ausgabe Klartext haben willst.

        So deshalb hab ich es ins HTML getan, weil ich eigentlich nur eine Tabelle brauche um rauszufinden, wie ich die ganzen Sonderzeichen selbst codiere, oder es eine Funktion gibt, die das ganze für mich codiert.

        Dann bist du auf dem Holzweg. Denn erstens machen das (wie gesagt) die Browser schon selbständig, zweitens könntest du mit HTML sowieso keine Programmlogik realisieren. Höchstens mit Javascript, aber auch das ist hier völlig unnötig.

        Ciao,
         Martin

        --
        Solange der Nagellack nicht trocken ist,
        ist eine Frau praktisch wehrlos.
          (Burt Reynolds, US-Schauspieler)
        1. Hallo Martin,

          also ich hab zBN ein input Feld für den Namen. [...]
          und der User "A/B Wandler" zB eingibt ...

          dann bekommst du diesen Namen fix und fertig URL-codiert als "A%2FB%20Wandler". Und den musst du nun höchstens wieder decodieren, wenn du für die Ausgabe Klartext haben willst.

          Hab das Bild jetzt z.B. in 1_PIR_Eingang%2FB%20EMZ.jpg genannt.

          wie kann ich nun das Bild anzeigen? Weder

          <img src="1_PIR_Eingang%2FB%20EMZ.jpg">

          noch

          <img src="1_PIR_Eingang/EMZ.jpg">

          funktioniert, da / ja sagt das 1_PIR_Eingang ein Ordner wäre.

          steffen

          1. Hi,

            Hab das Bild jetzt z.B. in 1_PIR_Eingang%2FB%20EMZ.jpg genannt.

            wie kann ich nun das Bild anzeigen? Weder

            In dem du den aktuellen Namen URL-gerecht kodierst.

            Weder
            <img src="1_PIR_Eingang%2FB%20EMZ.jpg">
            noch
            <img src="1_PIR_Eingang/EMZ.jpg">
            funktioniert

            Natuerlich nicht - beide entsprechen, nachdem sie vom Server beim Empfang dekodiert wurden, nicht dem Bildnamen.

            MfG ChrisB

            --
            "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
            1. Hi,

              In dem du den aktuellen Namen URL-gerecht kodierst.

              Dazu gibt es nicht zufällig eine schicke funktion?

              steffen

              1. Hi,

                In dem du den aktuellen Namen URL-gerecht kodierst.

                Dazu gibt es nicht zufällig eine schicke funktion?

                http://www.php.net/manual/en/book.url.php

                MfG ChrisB

                --
                "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
                1. Hi ChrisB

                  Dazu gibt es nicht zufällig eine schicke funktion?

                  http://www.php.net/manual/en/book.url.php

                  Da die einzigste funktion, die ich gebrauchen könnte urlendcode sowie rawurldecode nicht verwenden kann bleibt mir nur base64_decode.

                  Da ich jedoch die Dateinamen teilweise und nur die Sonderzeichen codiert werden können.

                  steffen

                  1. Hi,

                    Da die einzigste funktion, die ich gebrauchen könnte urlendcode sowie rawurldecode nicht verwenden kann

                    Wieso nicht?

                    Da ich jedoch die Dateinamen teilweise und nur die Sonderzeichen codiert werden können.

                    Kannst du auch vollstaendige Saetze?

                    MfG ChrisB

                    --
                    "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
                    1. Hi ChrisB,

                      1_PIR_Eingang/EMZ.jpg

                      Wenn so die Eingabe im Input wär müßte der Dateiname so aussehen:

                      1_PIR_Eingang(irgendwas)EMZ.jpg

                      Mit base64_encode codier ich ja auch A-Za-z.

                      Im Endefekt sollten da nur die Zeichen codiert werden, die img src nicht unterstützt.

                      Steffen

                      1. Hi,

                        1_PIR_Eingang/EMZ.jpg

                        Wenn so die Eingabe im Input wär müßte der Dateiname so aussehen:

                        1_PIR_Eingang(irgendwas)EMZ.jpg

                        Und was soll (irgendwas) sein?

                        Mit base64_encode codier ich ja auch A-Za-z.

                        Im Endefekt sollten da nur die Zeichen codiert werden, die img src nicht unterstützt.

                        Ja - aber nicht mit base64.

                        MfG ChrisB

                        --
                        "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
                      2. Yerf!

                        Im Endefekt sollten da nur die Zeichen codiert werden, die img src nicht unterstützt.

                        Nein. Im ersten Schritt musst du alle Zeichen Codieren/Umwandeln, die im Dateisystem des Servers nicht erlaubt sind (z.B. den "/"). Dafür gibts glaub ich keine fertigen Funktionen und die erlaubten Zeichen hängen auch vom OS des Servers ab. Da musst du dir wohl etwas selber bauen.

                        Im zweiten Schritt, wenn du den Dateinamen dann ins src des <img> einfügst, kannst du urlencode benutzen um alle Zeichen zu maskieren die dort nicht erlaubt sind.

                        Gruß,

                        Harlequin

                        --
                        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
          2. @@steffen:

            Hab das Bild jetzt z.B. in 1_PIR_Eingang%2FB%20EMZ.jpg genannt.

            Was heißt „genannt“? Die _Datei_ umbenannt? Nein, das solltest du nicht tun.

            Du musst den Dateinamen für einen URI entsprechend codieren.

            Live long and prosper,
            Gunnar

            --
            Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
  2. Hallo,

    womit beschäftigst Du Dich?

    Mit einem HTML-Problem. Dafür gibt es eine jeweils gültige
       Spezifikation HTML./4.01. Diese verweist Dich in der
       Attributdefinitionen für das Attribut src auf die Spezifi-
       kation für URIs.

    Zur Frage nach einem urlencoding ist für eine Hilfe auch die Angabe Deiner bevorzugten Programmiersprache wichtig. Eine weitere Möglichkeit stellt vielleicht der Webserver breit, wenn es sich um einen Apachen handeln sollte: mod_speling

    Gruß aus Berlin!
    eddi

    --
    Die Welt ist Dein Spiegel und sagt Dir wie schön Du bist - in Berlin steht ein "Man, bist Du kaputt." dahinter.
  3. @@steffen:

    Hab jetzt rausbekommen, dass % im Dateinamen zwar sein darf,

    In einem Dateinamen schon, aber diesen musst du kontextentsprechend codieren. Und in einem URI (HTTP-Kontext) hat '%' nun mal eine spezielle Bedeutung [RFC3986 §2.1] ...

    aber wenn ich sie mit <img src="./bild%bla.jpg"> ausgebe, zeigt er mir nichts an.

    ... und muss entsprechend maskiert werden. [RFC3986 §2.4]

    Live long and prosper,
    Gunnar

    --
    Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.