Umwandlung von Umlauten im Dateinamen (php)
blizzar
- php
0 Texter mit x0 Tom0 Texter mit x0 Tom
Hallo zusammen,
folgendes Problem, in meinem PHP Code wird per request ein Dateiname empfangen, welcher dann als PDF (Name - Datum.pdf)in einem voreingestellten Ordner auf dem Server gespeichert wird. Im Firefox auch gar kein Problem, nur im Internet Explorer lässt sich diese Datei später nicht herunterladen ist ein Umlaut darin enthalten. Der Download Spaß endet dann in einem 404! Wie kann ich das Script so abändern, das zb. aus Peter Müller ein Peter Mueller wird ? Der Code sieht wie folgt aus:
$filled_pdf = generate_pdf($pdf_template, $pdf_form_values);
$path = "/var/www/webxx/html/beispielordner/";
$filename = $_REQUEST["anrufer_name"]."-".date("d.m.Y").".pdf";
pdf_to_file($filled_pdf, $path.$filename);
Gruß Phil
str_replace ist dein Freund, das verarbeitet auch gleich arrays voll zu ersetzender Zeichen.
Hello,
str_replace ist dein Freund, das verarbeitet auch gleich arrays voll zu ersetzender Zeichen.
Wie ist das mit den Dateisystemen und Multibyte-Codes?
Sind die alle damit einverstanden?
Ein harzliches Glückauf
Tom vom Berg
Wie ist das mit den Dateisystemen und Multibyte-Codes?
Sind die alle damit einverstanden?
Wie ist das mit meiner Vermutung, daß Du die Antwort weißt?
@ blizzar die Suche nach str_replace Multibyte bringt einige Treffer.
Hello,
Wie ist das mit den Dateisystemen und Multibyte-Codes?
Sind die alle damit einverstanden?Wie ist das mit meiner Vermutung, daß Du die Antwort weißt?
Da hast Du jetzt daneben getippt, denn auswendig weiß ich das jetzt auch nicht, welches Filesystem welche Zeichen verträgt und was beim Verlinken per HTTP passiert...
@ blizzar die Suche nach str_replace Multibyte bringt einige Treffer.
str_replace() hat keine Multibyte-Entsprechung.
Hier werden tatsächlich Bit- bzw. Bytemuster gesucht und ausgetauscht.
Wenn also nun ein Filesystem keine "Sonderzeichen" auf Byteebene verträgt, wie sie in UTF-8 vorkommen können, dann muss man vermutlich erst feststellen, ob der Namen in UTF-8 gekommen ist, um zu wissen, welche Ersetzungsliste für str_replace() in Frage kommt.
Ein harzliches Glückauf
Tom vom Berg
Da hast Du jetzt daneben getippt, denn auswendig weiß ich das jetzt auch nicht, welches Filesystem welche Zeichen verträgt und was beim Verlinken per HTTP passiert...
Das war auch nicht meine Vermutung. Meine Vermutung war, Du weißt, daß nicht alle damit einverstanden sind.
@ blizzar die Suche nach str_replace Multibyte bringt einige Treffer.
str_replace() hat keine Multibyte-Entsprechung.
...
Wenn man nach str_replace Multibyte sucht bekommt man dennoch einige Treffer die bei der Problematik helfen können. Vielleicht lösen sie noch nicht alle Probleme aber es ist ein Anfang. Vielleicht gibt es aber auch kein Problem.
Hallo,
das eigentliche Request soll nicht ausgetauscht werden, lediglich der Dateiname soll ersetzt werden. Im Formular selbst wird der Name auch benutzt. Hier soll aber Müller stehen nicht Mueller und das funktioniert auch einwandfrei. Nur im Dateinamen müssen die Umlaute umgewandelt werden.
So gut bewandert bin ich noch nicht im PHP. Habe schon ne menge gelesen
nur fehlt mir die Verknüpfung wie ich das in dem Code umsetzen soll.
Hello,
nur fehlt mir die Verknüpfung wie ich das in dem Code umsetzen soll.
Gehen wir mal davon aus, dass Deine Webseite ISO-8859-1 benutzt.
Dann sollte der Browser auch in dieser Codierung seinen nächsten Request abschicken.
Nun wäre es wichtig zu wissen, welche Zeichen ersetzt werden müssen.
Wenn es nur die deutschen Umlaute wären, könntest Du so vorgehen:
$_search = array('Ä', 'Ö', 'Ü', 'ä', 'ö', 'ü');
$_replace = array('Ae, 'Oe', 'Ue', 'ae', 'oe', 'ue');
$filename = str_replace($_search, $_replace, basename($_REQUEST["anrufer_name"]));
Die Verwendung von $_REQUEST kann ich nicht gutheißen, wenn sie keinen wirklich wichtigen Grund hat. Ich würde immer $_GET oder $_POST verwenden, weil die Requestmethode dadurch ganz klar abgegrenzt ist.
Ein harzliches Glückauf
Tom vom Berg
Hallo und vielen Dank für die Hilfestellung.
Ich habe den Code nun so weit geändert, jedoch bekomme ich einen Fehler vom PHP Interpreter.
Parse error: syntax error, unexpected T_STRING, expecting ')' in /var/www/web48/html/nheim/exec.php on line 23
Der Code sieht nun wie folgt aus:
$filled_pdf = generate_pdf($pdf_template, $pdf_form_values);
$path = "/var/www/web48/html/nheim/auftragsmails/";
$_search = array('Ä', 'Ö', 'Ü', 'ä', 'ö', 'ü');
$_replace = array('Ae, 'Oe', 'Ue', 'ae', 'oe', 'ue');
$filename = str_replace($_search, $_replace, basename($_REQUEST["anrufer_name"] . "-" .date("d.m.Y").".pdf));
pdf_to_file($filled_pdf, $path.$filename);
Wobei line 23 sich auf:
$_replace = array('Ae, 'Oe', 'Ue', 'ae', 'oe', 'ue');
bezieht.
Über $_GET oder $_POST habe ich noch nicht nachgedacht.
Bin aber auch noch ein blutiger PHP Anfänger ;-)
Beste Grüße
Phil
Hallo Phil.
$_replace = array('Ae, 'Oe', 'Ue', 'ae', 'oe', 'ue');
^
|
Da fehlt einfaches Anführunszeichen.
Servus,
Flo
Hallo flowh.
$_replace = array('Ae, 'Oe', 'Ue', 'ae', 'oe', 'ue');
^
|
Da fehlt einfaches Anführunszeichen.
So, jetzt stimmt die Position.
Servus,
Flo
Hallo Flo,
nach so etwas einfachem habe ich gar nicht gesucht ;-) Danke
Tom Vielen Dank für die Hilfestellung. Funktioniert 100%
Texter mit X Habe mir nun den PHP Coder Pro zugelegt und hör af im Editor zu Coden ^^
Danke an alle, Problem gelöst!
Gruß
Phil
Bin aber auch noch ein blutiger PHP Anfänger ;-)
Lege Dir einen Editor mit Syntax Highlighter zu, der Syntaxfehler springt einem selbst hier im Forum sofort ins Auge, und gewöhne Dir an nach Fehlern zu suchen, da gibt es schwieriger zu findende Kandidaten (fehlende Klammer oder Semikolon, Vergleich mit einem einfachen "=" oder Tippfehler im Namen von Variablen).