Problem mit falscher Darstellung des Euro-Zeichens (€) in FPDF (erscheint als "â")?
Die restlichen Inhalte werden korrekt dargestellt, aber das Euro-Zeichen scheint nicht richtig kodiert zu werden. Meine Vermutung ist, dass es an der Zeichenkodierung (UTF-8 oder ISO-8859-1) oder an der verwendeten Schriftart liegt.
Hat jemand eine Idee, wie ich dieses Problem beheben kann?
Vielen Dank im Voraus für eure Hilfe!
<?php
session_start();
include "db.php";
// Holen der Bestelldaten
$query = "SELECT
u.vorname,
u.nachname,
b.bestelldatum,
b.bestelladresse,
bp.anzahl,
bp.preis,
p.produktname
FROM
user u
JOIN
bestellungen b ON u.id_user = b.id_user
JOIN
bestellungen_products bp ON b.id_bestellung = bp.id_bestellung
JOIN
products p ON bp.id_product = p.id_product
WHERE
b.id_bestellung = ?";
$id_order = $_GET["order_id"];
$stmt = $conn->prepare($query);
$stmt->bind_param("i", $id_order);
$stmt->execute();
$result = $stmt->get_result();
$order = $result->fetch_assoc();
$rechnungs_nummer = $id_order;
$rechnungs_datum = $order["bestelldatum"];
$lieferdatum = date("Y-m-d", strtotime($rechnungs_datum . " +2 weeks"));
// Neues PDF erstellen
require_once('fpdf/fpdf.php');
$pdf = new FPDF();
$pdf->AddPage();
// Titel und Rechnungsinformationen
$pdf->SetFont('Helvetica', 'B', 16);
$pdf->Cell(190, 10, 'Rechnung', 0, 1, 'C');
$pdf->SetFont('Helvetica', '', 12);
$pdf->Cell(100, 10, 'Rechnungsnummer: ' . $rechnungs_nummer);
$pdf->Cell(90, 10, 'Rechnungsdatum: ' . $rechnungs_datum, 0, 1);
$pdf->Cell(100, 10, 'Lieferdatum: ' . $lieferdatum, 0, 1);
// Empfängerinformationen
$pdf->Ln(10);
$pdf->Cell(100, 10, 'Kunde:');
$pdf->Ln(5);
$pdf->Cell(100, 10, $order["vorname"] . " " . $order["nachname"]);
$pdf->Ln(5);
$pdf->Cell(100, 10, $order["bestelladresse"]);
// Postenübersicht
$pdf->Ln(15);
$pdf->SetFont('Helvetica', 'B', 12);
$pdf->Cell(90, 10, 'Produkt', 1);
$pdf->Cell(30, 10, 'Menge', 1);
$pdf->Cell(30, 10, 'Preis', 1);
$pdf->Cell(40, 10, 'Gesamt', 1, 1);
$pdf->SetFont('Helvetica', '', 12);
$gesamtpreis = 0;
do {
$produktname = $order["produktname"];
$anzahl = $order["anzahl"];
$preis = $order["preis"];
$gesamt = $anzahl * $preis;
$gesamtpreis += $gesamt;
$pdf->Cell(90, 10, $produktname, 1);
$pdf->Cell(30, 10, $anzahl, 1, 0, 'C');
$pdf->Cell(30, 10, number_format($preis, 2, ',', '') . ' €', 1, 0, 'R');
$pdf->Cell(40, 10, number_format($gesamt, 2, ',', '') . ' €', 1, 1, 'R');
} while ($order = $result->fetch_assoc());
// Gesamtsumme
$pdf->SetFont('Helvetica', 'B', 12);
$pdf->Ln(5);
$pdf->Cell(150, 10, 'Gesamtsumme:', 0, 0, 'R');
$pdf->Cell(40, 10, number_format($gesamtpreis, 2, ',', '') . ' €', 0, 1, 'R');
// Ausgabe des PDFs
$pdf->Output('F', 'Rechnung_' . $rechnungs_nummer . '.pdf');
//header("location:mail.php?order_id=$id_order")
header("location:confirmation.php?order_id=$id_order")
?>
2 Antworten
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Webseite, PHP, Programmieren & Softwareentwicklung
Arbeite besser mit dem tFPDF-Plugin. Das unterstützt auch UTF-8.
Wenn du schon vermutest, dass es an der Zeichenkodierung liegen könnte, warum definierst du in dem Code nirgends die Zeichenkodierung um dann ggf. konvertieren zu können?
Und ja es liegt zuu 99% an der Zeichenkodierung. Fpdf erwartet die Codierung in windows-1252.
elenaBC2411
27.11.2024, 15:38
@SpezialAntwort
Die Umschreibung ist ja für HTML. In der Frage geht es aber nicht um HTML.
Wenn das so ist, dann könnte der Fragesteller ggf. mit entsprechenden Kodierungen arbeiten wie HTML € anstelle von "€". (extended ASCII-Codes) Vgl. https://www.ascii-code.com/