URL mit Umlaute wird ignoriert

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • URL mit Umlaute wird ignoriert

    Hallo,

    ich habe ein Problem und finde den Fehler einfach nicht.
    Ich habe ein Script, welches dynamisch Daten und Bilder ausgibt.

    Die Bilder werden zuvor eingelesen und auf dem Server gespeichert, in dem Script funktioniert das auch wunderbar, auch wenn in der URL Umlaute dabei sind.

    Bei der Ausgabe wird auf Bilder in einem Verzeichniss ohne Umlaute zugegriffen keine Probleme, nur sobald Umlaute in der URL auf das Verzeichniss auftauchen bleibt der href schließlich leer.

    Auf der Einzelseite erfolgt der Zugriff wie folgt:

    Code:
    <?php 
          $object = $object->getRessources();
          $groundPlan = $object->getGroundPlan();
          $images = $object->getImages();
          ?>
          Grundplan: <strong><a style="text-decoration: none" href="<?php echo $groundPlan[0]->webPath; ?>"><?php  echo $groundPlan[0]->fileName; ?></a></strong><br />
          <ul style="padding: 0">
          <?php foreach ($images as $image) : ?>
            <li style="display: inline"><a class="mietObjectImage" href="<?php echo $image->webPath; ?>"><img style="border: 1px solid gray;margin-left: 10px;margin-right: 10px;"  src="<?php echo $image->webPath ?>" width="70" height="70"/></a></li>
    Das funktioniert, wie gesagt, ohne Umlaute wunderbar.

    Die Funktion sind wie folgt aus:

    Code:
       public function getImages() {
            return $this->ressourceManager->getImages();
        }
    Nun weiß ich nicht mehr weiter. Ich habe schon versucht die echo Ausgabe mit echo rawurldecode ($image->webPath) umzuwandeln aber es geschieht nichts, im Seitenquelltext ist das href="" leer.

    Jemand eine Idee?

    Vielen Dank schon im voraus!

    Beste Grüße

  • #2
    Umlaute in Verzeichnis- oder Dateinamen sind eine ganz schlechte Idee. Damit gibt es immer wieder Probleme. Am besten sowas vermeiden.

    Kommentar


    • #3
      Hallo und willkommen im Forum,

      bitte brich Quellcode immer so um, dass eine Zeile nicht länger als 80 Zeichen (in Ausnhamefällen bis zu 100) lang ist, damit man nicht quer scrollen muss.

      Der Quelltext ist für das Problem überhaupt nicht hilfreich, da die verwendeten Klassen nicht bekannt sind und nicht einmal ersichtlich ist, welcher Klasse $object angehört.

      Grundsätzlich werden Umlaute in URIs URL-codiert, wie du schon sagtest. Die meisten Brower schicken URLs als URL-codiertes UTF-8, also bekommt man nach dem URL-Decodieren einen UTF-8-String. Unter Linux werden Datei- und Verzeichnisnamen oft auch als UTF-8 gehandhabt, unter Windows dagegen funktioniert das nicht. Da ist in unseren Breiten CP1252 in Verwendung. Wenn man Dateinamen jedoch auch URL-codiert, könnte man einen gemeinsamen Nenner finden, aber grundsätzlich sind Umlaute im Dateisystem keine gute Idee, wenn man auf Mehrarbeit und Sonderfallbehandlung verzichten will.

      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Sorry wegen dem Umbruch.

        Object wird hier hier eingebunden:

        Code:
        <?php ### Einzelansicht
        require_once('g/WebGlobal.php');
        WebGlobal::init();
        require_once('g/model/MietObjects.php');
        require_once('g/model/MietObject.php');
        $mietObjectManager = new MietObjects();
        
        if (isset($_GET['oid'])) {
            $oid = urldecode($_GET['oid']);
            $object = $mietObjectManager->find($oid)->current();        
        ?>
        Das mit den Umlauten im Verzeichnissname ist klar, nur muss das jetzt so geändert werden dass es dennoch hinhaut.

        Die Klasse MietObject erbt von AbstractModel, kann hier der Fehler liegen?

        Code:
        abstract class AbstractModel extends Zend_Db_Table_Row_Abstract {
            //put your code here
            function __get($columnName) {
                //return utf8_decode(parent::__get($columnName));
                return htmlentities(utf8_decode(parent::__get($columnName)));
                //return parent::__get($columnName);
            }
        }
        ?>
        Ich hoffe mit den Umbrüchen haut das jetzt besser hin :-)

        Kommentar


        • #5
          return htmlentities(utf8_decode(parent::__get($columnName)));

          Was ist denn das für ein Käse? Das verstümmelt dir die Daten.

          Kommentar


          • #6
            Das heisst genau?

            Kommentar


            • #7
              Weg mit dem Mist.

              Kommentar


              • #8
                Dann sind alle Angaben weg und es wird gar nix mehr angezeigt.

                Kommentar


                • #9
                  Dann machst du was falsch. Aber es ist nicht die Aufgabe des Forums ein fremdes Script zu reparieren. Wende dich an den Programmierer.

                  Kommentar


                  • #10
                    Zitat von zeitlos123 Beitrag anzeigen
                    Dann sind alle Angaben weg und es wird gar nix mehr angezeigt.
                    Die Fragen, die man sich hier stellen sollte, lauten:
                    1) Wo kommt $columnName her?
                    2) Wer ruft diese Funktion auf? (Wo geht der Return-Wert hin?)

                    1) Die Daten in $columnName könnten schon irgendeine spezielle Kodierung ("escaping") haben, die man vor der Weiterverarbeitung möglicherweise entfernen muss.

                    2) Der Aufrufer bestimmt, wo die bearbeitete Zeichenkette hingeschickt wird. Je nachdem, in welchem "Kontext" das geschieht, müssen bestimmte Zeichen, die dort eine spezielle Bedeutung haben, verändert ("escaped") werden, damit sie keinen Schaden anrichten können.

                    PHP-Code:
                    return htmlentities(utf8_decode(parent::__get($columnName))); 
                    utf8_decode() wandelt UTF-8 nach ISO-Latin-1. Findet sie Zeichen, die zwar in UTF-8 nicht aber in ISO-Latin-1 vorhanden sind, werden diese einfach durch Fragezeichen ersetzt. Fragezeichen sind in Dateinamen nicht gern gesehen (weder bei Fenstern noch bei Pinguinen). Nebenbei wird natürlich der ursprüngliche Text dadurch verändert.

                    htmlentities() ist eine Funktion mit begrenzter Anwendungsbreite. Sie wird meistens falsch eingesetzt. Was du suchtest, war höchstwahrscheinlich htmlspecialchars($columnName, ENT_QUOTES). Falls diese Zeichenkette irgendwo in HTML ausgegeben werden sollte. Anderenfalls benötigst du eine andere Escaping-Funktion.
                    Zuletzt geändert von fireweasel; 13.02.2012, 23:18.
                    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                    Kommentar

                    Lädt...
                    X