PHP gibt komische Zeichen aus

  • PHP

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von gunja.

    PHP gibt komische Zeichen aus

    Guten Morgen,

    aus dem Thema � PHP gibt komische Zeichen aus hat sich nun doch noch ein Problem ergeben.

    Kurze Zusammenfassung:

    Bei einer Datenbankabfrage wurden dauernd diese Zeichen ausgegeben: �
    Nun habe ich es schon mit etwas herumexperimentieren geschafft, dass diese im Browser nicht mehr dargestellt werden.

    Leider stehe ich nun vor dem Problem, dass wenn ich Verlinkungen mit Inhalt der Datenbanken darstelle, die URL dann mit diesen Zeichen gefüllt sind.
    Bsp: google.at/?q=a�c�c�o�u�n�t�d�a�t�a��

    Ich habe keine Ahnung woher diese Zeichen kommen und wie ich sie unterdrücke. Hat jemand von euch eine Idee zur Problemlösung?

    Danke im Voraus!
    Auf der Suche nach Coding-Kursen auf Lence.at
    Wie ich im letzten Thread bereits erwähnte, reicht es nicht, nur im HTML Dokument via Meta-Tag den Charset anzugeben.

    Was für einen Zeichensatz verwendet deine Datenbank / deine Tabelle(n)?
    Verwende bitte utf8_general_ci oder besser utf8_unicode_ci.

    Beim Verbindungsaufbau mit der Datenbank muss vorab ebenfalls die Zeichenkodierung festgelegt werden.
    Mit mysqli: php.net/manual/de/mysqli.set-charset.php
    Mit mysql: php.net/manual/de/function.mysql-set-charset.php (Veraltet!)
    Mit PDO: Im DNS, also "mysql:host=localhost;dbname=name_deiner_db;charset=utf8"

    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Link“ ()

    @Link danke für die versuchte Hilfe, leider ohne positivem Ergebnis...

    Kann es sein, dass es nach dem Prinzip, wie die Daten übertragen werden, einen Fehler gibt?

    Ich wandele den Content in einen Bytearray und gib ihn dann als Zeichenkette mit "|" als Trennzeichen wieder aus und übertrage ihn so an den Server.
    Am Server wird der Content dann wieder mithilfe folgender Prozedur in Plaintext umgewandelt:

    PHP-Quellcode

    1. if (strlen($content) > 0) {
    2. $bytes = explode('|', $content);
    3. $content = '';
    4. foreach ($bytes as $chr) {
    5. $content .= chr($chr);
    6. }
    7. }
    8. $content = $mysqli->real_escape_string(htmlspecialchars($content));


    Kann es sein, dass sich hier ein Fehler unterschlichen hat?
    Auf der Suche nach Coding-Kursen auf Lence.at
    - Zuerstmal hast du da ein ganz normales Array (weiß nicht wieso du von einem Bytearray sprichst).
    - Also wenn die Länge von $content 0 ist, wirst du in der letzten Zeile einen Fehler kriegen, weil $content nicht deklariert wurde (und dann entsprechend NULL ist).
    - Wieso du $content dann -ebenfalls in der letzten Zeile- einen anderen Wert gibst, ist mir auch nicht klar.
    - Ebenso wenig wie der Grund, warum du das so einträgst. Ist doch Schwachsinn. Trag es einfach als Plaintext ein.
    - htmlspecialchars ist fehl am Platz hier. Schließlich ist HTML oder JavaScript generell für eine Datenbank nicht gefährlich (mit Ausnahme von speziellen Zeichen). Hierfür verwendet man mysqli_real_escape_string(). So kannst du es Plain in die DB eintragen. htmlspecialchars brauchst du erst später, wenn du es aus der Datenbank geholt hast und dann ausgeben willst.

    Link :thumbup:
    Hello World
    Danke dir @Link!

    1. Ja, ich habe zuerst den Contentstring in einen Bytearray umgewandelt und ihn dann wieder in einen String umgewandelt, damit ich die Bytes via POST übertragen kann.
    2., 3. Danke für den Tipp
    4. Nun ja... ist in dem Content ein Zeichen wie "&" dann funktioniert POST nicht richtig
    5. Danke für den Tipp
    Auf der Suche nach Coding-Kursen auf Lence.at
    Gibt es noch andere Möglichkeiten für die Übertragung von Daten über Post, ohne dass ein falsches Zeichen im Content Fehler ergibt?
    Auf der Suche nach Coding-Kursen auf Lence.at
    Danke für den Tipp @gunja
    Bin mir jedoch bereits zu 100 % sicher, dass das Problem bei der decodierung mit der Prozedur:

    PHP-Quellcode

    1. if (strlen($content) > 0) {
    2. $bytes = explode('|', $content);
    3. $content = '';
    4. foreach ($bytes as $chr) {
    5. $content .= chr($chr);
    6. }
    7. }
    8. $content = $mysqli->real_escape_string(htmlspecialchars($content));

    liegt.

    EDIT: Danke für eure Hilfe, habs nun endlich geschafft. Das Problem lag bei der Codierung.
    Auf der Suche nach Coding-Kursen auf Lence.at

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KingTimon“ ()