dedlfix: Verzeichnis erstellen und Umlaute entfernen

Beitrag lesen

Tach!

Das Problem ist einfach eine Seite wo auf Bilder in Verzeichnissen zugegriffen wird, welche angelegt werden, sobald man eine Datei hochlädt, das geschieht wiederum indem man das Objekt bearbeitet, also die ObjectID nötig ist und diese muss Umlaute erlauben, man kann vom User nicht erwarten das er diese entfernt.

Du erwartest aber vom User, dass er eine bestimmte Stringlänge nicht überschreitet und sich bei den anderen (Sonder-)Zeichen an solche hält, die in einem Dateinamen verwendet werden können. Wenn ich das richtig sehe, verwendest du sie auch ohne weitere Behandlung im URL-Kontext. Vielleicht hättest du ja das Thema gar nicht weiter beachtet, wenn du nicht mit Umlauten ein Problem bekommen hättest.

Also ohne Umlaute werden Bilder angezeigt, mit Umlaute (in einem Beispiel ein ö in der ObjectID) keine Chance, ich habe das mit Printer mal ausgeben lassen, mit Umlaute bleibt das Array leer.

Es verschwinden nicht einfach so Zeichen, Strings oder Array-Einträge. Nur äußerst selten wirst du auf einen Fehler innerhalb PHPs stoßen, der solche Auswirkungen hätte. Die Ursache liegt also in deinem Code, davon kannst du ausgehen. Verwende var_dump() für die Kontrollausgaben, und wenn du ein Problem mit Zeichenkodierung vermutest, kannst du urlencode() missbrauchen. Das lässt im Gegensatz zu einem bin2hex() lateinische Buchstaben ungeschoren und zeigt für alle anderen Zeichen die Bytewerte an.

Die Funktion sieht erstmal so aus:

Dein Code ist irgendwie nicht richtig nachvollziehbar. Da gibt es zweimal die Methode getRessources() und getImages() ruft ein weiteres getImages() auf. Du erwähnst nicht, welchen Klassen diese Funktionen zugehören und auch bei der Problembeschreibung lässt du diese Information weg. Ein Zusammenspiel, wie welche Daten wohin gelangen, ist nicht zu erkennen.

Es ist verständlich, wenn du nicht den gesamten Code posten möchtest und das ist auch nicht erforderlich/erwünscht. Extrahiere das Problem in eine neue Datei, so dass es lauffähig und damit für Außenstehende nachvollziehbar ist, entferne aber alles unwichtige, so dass so wenig Code wie möglich übrigbleibt.

$ressource->webPath = sprintf('https://www.domain.de/uploads/%s/%s/%s/%s', $this->userID, $this->objectID, $res, $file);

Der Kontextwechsel muss auch bei URLs beachtet werden. Und für Beispiel-Domains muss man keine real existierenden Namen verwenden, es gibt extra dafür vorgesehene: http://de.wikipedia.org/wiki/Domain#Sonderf.C3.A4lle

array_push($resArr, $ressource);

Beachte die Hinweise zur Funktion array_push().

dedlfix.