Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

PHP: Bilder anzeigen, Dateiname enthält Umlaute

uspc / 11 Antworten / Baumansicht Nickles

Hallo, ich möchte mit img src ein Bild auf einer Website darstellen. Der Dateiname enthält ein Umlaut, das soll auch so bleiben. In meiner Scriptdatei ist alles in UTF-8 getrimmt.

Im Head hab eich  charset=utf-8, die Scriptdatei ist UTF-8 kodiert, dann lese ich die Dateien aus einem Verzeichnis aus (Linux-Server):

while ($quelle = readDir($handle)) {         // Verzeichnis auslesen 

in $quelle stehen noch die komischen Zeichen. Das ändere ich mit:
  $datei = utf8_encode($quelle);

Jetzt hat $datei zeigt die korrekten Zeichen, also zB. Müller.jpg

Genauso heisst die Bilddatei. Das Bild wird aber nicht angezeigt. Ohne Umlaute ist alles ok. Der Dateiname wird sogar mit title='$datei'  korrekt angezeigt, also mit ü.   Ich habe schon versucht, alle Dateien mit str_replace("ü", "ue", $datei) umzubenennen, das geht nicht. Wäre auch nicht die Ideallösung, das die Namen der Bild-Dateien erhalten bleiben sollen.

Was habe ich nicht bedacht?  Vielen Dank! uspc

bei Antwort benachrichtigen
Borlander uspc „PHP: Bilder anzeigen, Dateiname enthält Umlaute“
Optionen

URL-Encoding für die Pfadangebe verwendet? Da könnte es sonst auch noch mal Probleme geben…

bei Antwort benachrichtigen
uspc Borlander „URL-Encoding für die Pfadangebe verwendet? Da könnte es ...“
Optionen

Ja,  habe ich auch bedacht... trotzdem 

Danke für den Tipp. 

bei Antwort benachrichtigen
Borlander uspc „Ja, habe ich auch bedacht... trotzdem Danke für den Tipp.“
Optionen

Lass doch statt dem Bild einfach mal einen Link ausgeben mit der selben URL und dann schaue mal an welcher Stelle es nicht mehr passt, bzw. wie die Umlaute ersetzt werden.

bei Antwort benachrichtigen
uspc Borlander „Lass doch statt dem Bild einfach mal einen Link ausgeben mit ...“
Optionen

Hab mal den Link eingesetzt, gleiches Ergebnis: Oben im Firefox steht in der URL Pfadangabe xxx/downloadfiles/Testordner/Blümchen.jpg   Wenn ich den Dateinamen händisch umbenenne in Blume.jpg, gehts... Und wenn ich mit "ü" den Link anklicke: Objekt nicht gefunden!

bei Antwort benachrichtigen
uspc Borlander „URL-Encoding für die Pfadangebe verwendet? Da könnte es ...“
Optionen

Hallo Borlander, ich habe $var = utf8_encode($var) gesetzt. Der Dateiname wird sogar im title='$var' mit Umlauten korrekt angezeigt. Auch den ganze Pfad schon mit $pfad = utf8_encode($pfad) gesetzt, irgendwie muss es doch gehen? Ganz Google ist voll mit Kommentaren wie: Bitte umbenennen... Diese Lösung habe ich fertig, da kommen aber unsere Leute nicht klar, die Dateinamen sollen so bleiben. Ferner müsste ich Schreibrechte auf dem Server einrichten... Übrigens dass es geht beweist web.de, Bildergallerie.

Der Stoplerstein muss <img src='$var'> sein. Weil im gleichen Tag geht ja wie gesagt title: <img src='$var' title='$var'>  In $var wird also "Blümchen.jpg" korrekt erkannt. Zeigt nur kein Bild.

Was kann es noch sein? Danke, Viele Grüße, uspc

bei Antwort benachrichtigen
Borlander uspc „Hallo Borlander, ich habe var utf8_encode var gesetzt. Der ...“
Optionen

Hast Du schon mal probiert ob das ganze hartcodiert funktioniert?

Wenn es allerdings schon daran scheitert, dass Du die Datei auch bei korrekter Eingabe der URL nicht aufrufen kannst stellt sich mir folgende Frage: Wie kommt die Datei auf den Server? Ist an dieser Stelle sichergestellt, dass die Zeichensatzcodierung korrekt umgesetzt wird bzw. eine Umcodierung stattfindet falls Quell und Zielsystem unterschiedliche Codierungen verwenden. Sonst gehen Umlaute womöglich schon beim Dateitransfer kaputt…

Ich verwende auch lokal keine Umlaute und Sonderzeichen (also eigentlich nur Groß- und Kleinbuchstaben, Ziffen, Punkt, Unterstrich, Minus) in Dateinamen weil das über Systemgrenzen hinweg auch heute noch immer wieder mal Ärger bereitet :-|

Gruß
Borlander

bei Antwort benachrichtigen
uspc Borlander „Hast Du schon mal probiert ob das ganze hartcodiert ...“
Optionen

Hallo, hab auch direkt eingegeben, also hartcodiert. In der DB stehen nur die Verzeichnisnamen, die auch im Bildordner leiegen, in denen dann die Bilddateien liegen. Die Bilsdateien liest das PHP-Script aus, ja und sollten dann auch als Bild erscheinen. Übrigens hab ich das Anlegen der Verzeichnisse (und damit der Eventbezeichnungen) so gemacht, dass Umlaute und Leerzeichen etc. umbenannt werden. Damit sind meine Leute einverstanden. Nur die Bilddateien selber sollten eigentlich nicht verändert werden.

Wie gesagt, man sieht, dass es bei web.de wirklich funktioniert. Derzeit baue ich das ganze um, arbeite mit umbenennen, weil ich hab keine andere Lösung.

Danke Borlander.

bei Antwort benachrichtigen
eugeniak1 uspc „Hallo, hab auch direkt eingegeben, also hartcodiert. In der ...“
Optionen

- Die Datenbank, Tabellen, Spalten sollten jeweils auf utf8_ci gestellt werden
- Die Datenbank-Verbindung muss mit SET NAMES utf8 auf UTF-8 gesetzt werden (häufiger Fehler)
- Die PHP-Skripte sollten in der Entwicklungsumgebung/dem Editor als UTF-8-Datei abgespeichert werden (ohne UTF-8 BOM).
- Das PHP-Skript sollte entsprechend einen HTTP-Header senden: header("Content-type:text/html; charset=utf-8");
- Die HTML-Seiten sollten zusätzlich noch einen gleichlautenden <meta>-Tag anführen: <meta http-equiv="content-type" content="text/html; charset=utf-8" />

Der erste Punkt kann über phpMyAdmin's Strukturansicht der Datenbank, der Tabellen und der Spalten überprüft werden,
die letzten beiden Punkte können im Browser überprüft werden: Firefox->Ansicht->Zeichenkodierung->Unicode UTF-8 (?)

Wenn nun weiterhin falsche Zeichen dargestellt werden, wurde mindestens ein Punkt nicht beachtet, oder es sind bereits fehlerhafte Daten aus der Datenbank, einer Datei oder dem PHP-Skript/HTML-Seite eingebunden oder durch eine Konvertierung der Maßnahmen erzeugt worden.

Das ist von http://www.php.de/datenbanken/55699-umlaute-mysql-datenbank.html#post430223

Sorgfältig nochmal den Namen der Datei überprüfen. Manchmal tippt man falsch und PHP oder MySQL nimmt das als Befehl.  Bei mir ist so was schon mal geschehen-

bei Antwort benachrichtigen
uspc eugeniak1 „- Die Datenbank, Tabellen, Spalten sollten jeweils auf utf8_ci ...“
Optionen

Hallo eugeniak1,

Die Punkte 1 und 2 sind erfüllt, Pos. 3 auch, Pos. 4 ist in Pos. 5 in einer gemeinsamen Datei eingebunden, also alles erfüllt. Ging trotzdem nicht. Ich hatte das seinerzeit mit dem Umbenennen der Dateinamen gelöst, was ich aber eigentlich nicht wollte. Leerzeichen und Umlaute scheinen bei Links tödlich zu sein. Wie gesagt, das es geht zeigt zB. web.de in der Fotogallerie.

Was mir jetzt auffällt ist Pos. 1, utf8-general-ci hab ich. Ansonsten alles eingehalten.

Dennoch Danke für die Tipps. VG uspc

bei Antwort benachrichtigen
eugeniak1 uspc „Hallo eugeniak1, Die Punkte 1 und 2 sind erfüllt, Pos. 3 auch, ...“
Optionen

Hallo, uspc,

irgendwo in DB-Class muss diese Finktion sein:

  public function getValueEncoded( $field ) {
    return htmlspecialchars( $this->getValue( $field ) );
  }

und in db.php ist das auch sehr hilfreich:

("regex", "/^[ \'\-a-zäöüÄÖÜßA-Z]+$/u" )

auch in view.php:

 $d->getValueEncoded( "value" );

bei Antwort benachrichtigen
Slartibartfas uspc „PHP: Bilder anzeigen, Dateiname enthält Umlaute“
Optionen
Dieser Beitrag ist gelöscht!
Dieser Beitrag wurde auf Wunsch seines Veröffentlichers entfernt.