yoshi: sonderzeichen für url umwandeln

hallo ..

ich möchte mit php den html code für ein bild ausgeben. der pfad des bildes kann sonderzeichen und leerzeichen usw. beihhalten.
jetzt möchte ich diesen pfad irgendwie noch umwandeln, dass er das bild nachher auch finden kann.

wenn ich das mit urlencode mache, wird zb aus
'ö ä ü & testpfad'
nachher
'%F6%20%E4%20%FC%20%26%20testpfad'

so findet er das bild jedoch nicht.. wenn ich allerdings mit dem browser (FF) dorthin navigiere, ist der pfad
'%c3%b6%20%c3%a4%20%c3%bc%20&%20testpfad'

wie kann ich nun mit php richtige pfade im sinne vom 2ten beispiel machen ?

gruss

  1. Hello,

    das kommt immer drauf an, über welchen Weg der Parameterstring zum Server gelangt.
    Im Environment des Scriptes sollte erst noch der kodierte String liegen.
    Wenn Su aber mittles PHP und $_GET darauf zugreifst, sollte er bereits decodiert sein.

    Das Gleiche sollte eigentlich auch innerhalb der Zugriffsmethode des HTTP-Servers geschehen. Erst dekodieren, dann zugreifen.

    Ist mir aber neulich auch aufgefallen, dass unter bestimmten Umständen da Unstimmigkeiten bestehen.
    Die beiden genannten Fälle sollten aber klappen, wenn Du rawurlencode() benutzt (Erfahrung aus der Praxis).

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. vielen dank für die schnelle antwort..

      imho speichere ich keinen shit in die tabelle ..

      <?php
      mysql_query('insert into '.MYSQL_TABLE_ALBUM.' (position, albumname, description, timestamp) values (''.$position['id'].'', ''.$_POST['albumname'].'', ''.$_POST['description'].'', ''.time().'')') or die(mysql_error());
      ?>

      ich speichere unmittelbar den vom $_POST übergebenen wert in die tabelle. beim auslesen maskiere ich auch nichts spezielles. ich versuche halt nur mit rawurlencode() valide uri's zu erstellen.

      <?php
      $result = mysql_query('select * from '.MYSQL_TABLE_IMAGE.' where id_album = ''.$_GET['id'].'' order by position desc');
      while($images = mysql_fetch_array($result)) {
      echo '<tr>
          <td width="465"><img src="gallery/'.rawurlencode($album['albumname']).'/thumbnails/'.$images['filename'].'" alt="'.$images['filename'].'"></td>
          <td width="84">&nbsp;</td>
        </tr>';
      }
      ?>

      wo habe ich einen denkfehler ?  sieht jemand irgend etwas ?

      wäre um hilfe dankbar,
      gruss

      1. Moin!

        ich speichere unmittelbar den vom $_POST übergebenen wert in die tabelle.

        Oh. Du willst irgendwann ein Sicherheitsupdate ankündigen?

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
        1. ich speichere unmittelbar den vom $_POST übergebenen wert in die tabelle.

          Oh. Du willst irgendwann ein Sicherheitsupdate ankündigen?

          ne ;) es ist ja nur dem admin erlaubt, eine gallery zu erstellen ..

          gruss

          1. hi,

            ich speichere unmittelbar den vom $_POST übergebenen wert in die tabelle.

            Oh. Du willst irgendwann ein Sicherheitsupdate ankündigen?

            ne ;) es ist ja nur dem admin erlaubt, eine gallery zu erstellen ..

            Wenn der Admin-Login ähnlich unsicher gestaltet ist, dann wäre jeder dfer Zugriff auf das Script hat potentieller "Admin".

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
          2. Hello,

            ich speichere unmittelbar den vom $_POST übergebenen wert in die tabelle.

            Oh. Du willst irgendwann ein Sicherheitsupdate ankündigen?

            ne ;) es ist ja nur dem admin erlaubt, eine gallery zu erstellen ..

            Es ist aber nicht teuer, hier die beiden Regeln einzuhalten, die durchgängig immer wieder auftreten:

            Wenn das Script aus einem Rechner mit "magic_quotes_gpc = on" läuft, dann erstmal die von PHP eingefügten Maskierungen wieder entfernen. Man stellt das fest, indem man get_magic_quotes_gpc() abfragt http://de2.php.net/manual/de/function.get-magic-quotes-gpc.php

            Die Entfernung der Maskierungen macht man dann am besten mit einer rekursiven Funktion. Such mal im Archiv nach "category:PHP function strip("

            Und da Du MySQL benutzt, solltest Du dann dringend die Funktion

            mysql_real_escape_string($string,$connection)
              http://de2.php.net/manual/de/function.mysql-real-escape-string.php

            benutzen, da die alle für die Schnittstelle kritischen Zeichen maskiert. Das sind mehr, als sie addslashes() von PHP berücksichtigen würde.

            Die Magic Quotes auszuschalten würde bedeuten, dass Du in Zukunft _immer_ selber daran denkst, zu prüfen und zu maskieren. Das betrifft nicht nur die Datenbanken, sondern auch Formmailer, Arbeit mit Dateien usw. Die Funktion schützt zwar leider auch nicht immer, aber wenigstens manchmal :-)

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

  2. vielen dank schonmal für die hilfe..

    evt nochmals zu verständlichkeit. ich code eine gallery. in der mysql tabelle steht zb der albumname. mit ö, ä und was weiss ich..
    ich lese den albumname raus, und will das vorschaubild anzeigen lassen.
    das mache ich etwa so:

    echo '<tr>
        <td width="465"><img src="gallery/'.rawurlencode($album['albumname']).'/thumbnails/'.$images['filename'].'" alt="'.$images['filename'].'"></td>';

    wenn jetzt in der tabelle als albumname 'ö ä ü & testpfad' steht, wird nach rawurlencode daraus ein '%F6%20%E4%20%FC%20%26%20testpfad' und er findet das bild nicht..

    weiss jemand woran es liegt?

    gruss

    1. Hello,

      ich kann Dir folgen :-)

      Wichtig ist aber auch, dass Du die Namen (Pfade) richtig maskiert an die Datenbankschnittstelle übergibst zum Speichern. Wer Scheiße abspeichert bekommt keine Bonbons zurück.

      Also erstmal die PHP-Maskierungen rückgängig machen, falls vohanden
      dann die datenbankspezifischen hinzufügen
      dann est den Querystring zusammenstellen

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau