Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] String umformatiert ausgeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] String umformatiert ausgeben

    Hey Leute,

    Ich habe folgendes Problem:
    Ich möchte einen String richtig ausgeben.

    PHP-Code:
    $txt "Scheiße, Schulstraße, Ärger, Überall, erschömpfen";
    $txt mb_strtoupper($txt'UTF-8');
    echo 
    $txt
    Leider wird mir der String so ausgegeben:
    SCHEIßE, SCHULSTRAßE, ÄRGER, ÜBERALL, ERSCHÖMPFEN

    Wie kann ich das umsetzen?


  • #2
    Charset per header mitteilen.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Okay ich glaube ich habe falsch nachgedacht, ich werde mein Problem etwas genauer erklären.

      Ich versuche zurzeit ein PDF-Dokument mit Hilfe von PHP zu erstellen.
      Dabei benutze ich TCPDF

      http://www.tcpdf.org/

      Das PDF-Dokument soll mit Werten aus einer Datenbank gefüllt werden. Das funktioniert auch, aber sobald sich ein Sonderzeichen wie z.B (ß,ä,ö,ü) im Wert befindet, wird einfach gar nichts ausgegeben.

      Angenommen in $sql würde jetzt Schulstraße stehen, dann würde er diesen nicht anzeigen. Würde aber stattdessen Schulstrasse in $sql stehen würde er diesen anzeigen.

      PHP-Code:
      $pdf->SetFont('''b'10);
      $txt 'Straße / Hausnummer: ';
      $pdf->SetFillColor(230255255);
      $pdf->MultiCell(450$txt0'J'10''''true0truetrue7'M');
      $pdf->SetFont(''''8);
      $sql ="SELECT strasse FROM user WHERE login = 'xxx-xxx-xxx'";
      $strasse einzel_abfrage($sql);
      $txt "$strasse"

      Zusätzlich passiert es, dass wenn ich in $txt, die Variable durch einen String ersetze, der Wert normal ohne Probleme ausgegeben wird. Sprich:

      PHP-Code:
      $sql ="SELECT strasse FROM user WHERE login = 'xxx-xxx-xxx'";
      $strasse einzel_abfrage($sql);
      $txt "Schulstraße"
      Die Datenbank Kollation stimmt auch, alles schon getestet er scheint lediglich ein Problem mit den Variablen zu haben.

      Woran könnte das liegen?

      Kommentar


      • #4
        Zeichensatz halt. Lass dir an geeigneten Stellen mal eine Hex-Repräsentation des Werts ausgeben. Dann kannst du gucken, wo es falsch wird.

        Kommentar


        • #5
          Die entscheidende Zeile fehlt - welches Encoding ist für TCPDF eingestellt (wird im Konstruktor gemacht)?
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            Problem gelöst

            Das Problem ist nun gelöst, dank diesem Hinweis!

            Zitat von lstegelitz Beitrag anzeigen
            Die entscheidende Zeile fehlt - welches Encoding ist für TCPDF eingestellt (wird im Konstruktor gemacht)?
            Die Zeile fehlte nicht. Das Encoding war auf UTF-8 eingestellt.

            PHP-Code:
            $pdf = new TCPDF(PDF_PAGE_ORIENTATIONPDF_UNITPDF_PAGE_FORMATtrue'UTF-8'false); 
            Damit ein 'ß' ausgeben werden kann benötigen es ein anderes Encoding.


            Hier die Lösung:

            PHP-Code:
            $pdf = new TCPDF(PDF_PAGE_ORIENTATIONPDF_UNITPDF_PAGE_FORMATfalse'ISO-8859-1'false); 

            Vielen Dank für alle Antworten!

            Kommentar


            • #7
              Damit ein 'ß' ausgeben werden kann benötigen es ein anderes Encoding.
              Das stimmt so nicht ganz.

              Zur Ausgabe muss nur das gleiche Encoding benutzt werden, mit dem auch der Umlaut kodiert wurde.
              Du hast ein ISO-kodiertes ß versucht in UTF-8 auszugeben - unter dem Hex-Code des ISO Encodings findet sich in UTF-8 aber ein ganz anderes Zeichen.
              Umgekehrt würdest du bei der Darstellung eines UTF-8 kodierten 'ä' in ISO-encoding zwei Zeichen sehen (weil ein UTF-8 kodiertes 'ä' 2 Byte belegt).

              Die Lösung lautet also: Konsequente Nutzung eines Encodings an allen Stellen.
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Korrekt. Und Stellen bedeutet: Eingabe (Formdata, Streams, Files, Datenbank, lokale Variablensetting), Verbindungen (DB Connection, FileHandle), Ausgabe (Browserheader, beteiligte Scripte).
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar

                Lädt...
                X