ratzekahl1
Goto Top

Tcpdf Dateiname mit Sonderzeichen

Hallo zusammen,
ich nutze tcpdf zur Generierung von individuellen pdf. Soweit so gut.Umlaute werden korrekt dargestellt. Nur den Dateinamen bekomme ich nicht utf8.
ALso:
Herr Müller geht nach Hause in Würzburg am Fluß. Alles einwandfrei.
Exportiere ich das pdf nach zB soll : Müller_053022.pdf
Ist: MC3BCller_053022.pdf

Die Datei ist utf-8, der Charset ist utf-8 und utf8encode(filename) habe ich auch:
$dokumentenordner="./doks/";  
// $this->pdf->Output($fileNL, 'F');   
// echo $dokumentenordner.$docname;
$docname=urlencode($docname);
$pdf->Output($docname, 'I');  

Ohne das urlecode bekomme ich Mller_053022pdf. Wie bekomme ich die Dateinamen "schik"?
Natürlich kann ich
str_replace("ü","ue",$docname);  
machen, möchte ich aber möglichst nicht.
mfG
ratzekahl

Content-ID: 2938382731

Url: https://administrator.de/contentid/2938382731

Ausgedruckt am: 22.11.2024 um 01:11 Uhr

colinardo
Lösung colinardo 30.05.2022 aktualisiert um 16:57:34 Uhr
Goto Top
Servus.
Das hat nichts mit dem Encoding zu tun, denn die Output-Funktion von TCPDF selbst entfernt in dessen Code alle Sonderzeichen und ersetzt Blanks durch einen Underscore im Dateinamen wenn der erste Index des zweiten Parameters nicht "F" ist ... Siehe im Quellcode von TCPDF die Zeilen ab 7635
https://github.com/tecnickcom/TCPDF/blob/main/tcpdf.php
* @param string $name The name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character.
// ...
if ($dest != 'F') {  
	$name = preg_replace('/[\s]+/', '_', $name);  
	$name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name);  
}
// ...
Passe dir den zweiten Regex (Zeile 4) oben einfach mal ergänzt um die Umlaute an.
$name = preg_replace('/[^a-z0-9_\.-\xDF\xE4\xF6\xFC]/i', '', $name);  
Alternativ die Zeile auskommentieren(Nebenwirkungen dieser Maßnahme habe ich aber nicht weiter geprüft). Und schon sollten die Umlaute nicht mehr entfernt werden.

Grüße Uwe

edit: regex an php angepasst
ratzekahl1
ratzekahl1 30.05.2022, aktualisiert am 31.05.2022 um 08:37:23 Uhr
Goto Top
@uwe: Vielen Dank, das werde ich morgen mal testen! RegEx ist bei mir wie der Teufel mit dem Weihwasser. ;)
Day after:
Den Block auskommentiert. Underscore mache ich eh selber und es läuft. Vielen lieben Dank!!!

@all. Das find eich an Administrator.de Klasse. Man bekommt relativ schnell Hilfe und keine Klugsche??er, die erstmal eine Diskussion lostreten über Sinn und Zweck und ob BMW besser ist oder Mercedes. ;)