tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Alex_T
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
385
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    RedWraith RedWraith ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Beiträge
    61
    Hallo !

    Ich skripte gerade an einer php Datei herum, die POST Daten von einem Computerprogramm beim Aufruf übergeben kriegt.

    Ich kriege die POST Daten in meinem Script, dekodiere sie mit urldecode und danach mit html_entity_decode und verarbeite sie.

    Das funktioniert auch soweit ganz gut, bis ich auf Umlaute treffe. Diese sind nämlich nicht mit ü ä und so weiter kodiert, sondern auf solche Art und Weise: ö ü ä.

    Der Browser zeigt die richtigen Buchstaben an, also wird daran wohl nichts falsch sein, aber die Daten sollen in eine Datenbank eingefügt werden und da kann ich die Kodierung so garnicht gebrauchen.

    Weiß jemand, wie man die wieder umgewandelt kriegt ?

    html_entity_decode scheint nicht zu funktionieren.
     

  2. #2
    Tim Bureck Tim Bureck ist offline Mitglied Platin
    Registriert seit
    Apr 2009
    Ort
    Düsseldorf (NRW)
    Beiträge
    508
    Versuchs mal mit htmlentities()
     

  3. #3
    Avatar von Alex_T
    Alex_T Alex_T ist offline Mitglied Brokat
    Registriert seit
    Jul 2009
    Beiträge
    311
    Bei der Geschichte wirst du mit htmlentities denk ich mal nicht weit kommen, denn hier handelt es sich um Dezimalwerte eines ASCII-Zeichens, womit PHP meines Wissens nach nicht umgehen kann.
    Da wird dir wohl "preg_replace" bzw. "str_replace" nicht erspart bleiben.

    Wenn du dir daraus eine Funktion basteltst ist es wieder komfortabel .
    Hier mal noch eine Tabelle der ASCII-Zeichen: ASCII.
    RedWraith bedankt sich. 
    Mfg, Alex

    “The function of good software is to make the complex appear to be simple.” (Grady Booch)
    “First, solve the problem. Then, write the code.” (John Johnson)

  4. #4
    Tim Bureck Tim Bureck ist offline Mitglied Platin
    Registriert seit
    Apr 2009
    Ort
    Düsseldorf (NRW)
    Beiträge
    508
    Den Ursprungsstring kann man allerdings damit behandeln, so werden die Entitäten ü etc. gesetzt statt deren Dezimalentitäten. Wenn man die Dezimalentitäten umwandeln will, kommt man um deine Methode natürlich nicht rum.
     

  5. #5
    RedWraith RedWraith ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Beiträge
    61
    Hi !

    Und danke für die Antworten.
    Den Ursprungsstring mit htmlentities zu verschlüsseln ist an sich eine prima Idee, das Problem dabei ist nur, dass ich die Post Daten nicht von einem anderen php Skript übergeben kriege, sondern von einem Programm das ich nicht geschrieben habe.

    Laut Dokumentation soll diese Postdaten zuerst url-dekodiert und danach die Entities aufgelöst werden. Nur leider haben die Daten keine html entities sondern den diese ANSI Kodierung.

    Ich hab auch schon an str_replace gedacht, der Nachteil daran ist dass die Post Daten auch ein Freiform Textfeld enthalten. Wenn ich also str_replace nehme, dann müsste ich jede mögliche Variante berücksichtigen...

    Aber es gibt bestimmt eine Art char(int) Funktion in php mit der man Zahlencodes in die entsprechenden Buchstaben umwandeln kann. Ich werd versuchen, den Text zu parsen, den Zahlencode auszulesen und dann entsprechend umzuwandeln.

    Ich meld mich, wenn es geklappt hat.
     

  6. #6
    Avatar von Frezl
    Frezl Frezl ist offline Mitglied Brokat
    Registriert seit
    Oct 2003
    Beiträge
    473
    Kurze Frage: Warum sollen die Kodierungen so nicht in die Datenbank übernommen werden?
     
    Wenn du das Gefühl hast "Cool, der Kerl konnte mir echt helfen!", dann teil es mir mit, indem du mich entsprechend bewertest!

  7. #7
    RedWraith RedWraith ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Beiträge
    61
    Hi !

    Das ist ganz einfach. Das System in das importiert werden soll ist ein Extranet für unsere Kunden. Die Daten, die importiert werden, sind Statistik und Lagerbestände und so ein Zeug.

    Nun gibt es dort teilweise Stringverknüpfungen. Zum Beispiel wenn ein Kunde wissen will, was diese Woche alles in die "Müllergasse" geliefert wird. Und naja... "Müllergasse" != "Müllergasse"

    Außerdem sollte eine html Kodierung IMHO erst dann geschehen, wenn notwendig.

    Ich hab jetzt folgende Lösung:
    PHP-Code:
     <?php
     
        $zeichenkette 
    "Das ist die Beschriftung eines Überschallflugzeugs.";
        
    $suchmuster '/&#(\d{1,3});/';
        
    $ersetzung "$1";
        
        function 
    callback($treffer)
        {
            return 
    chr($treffer[1]);
        }
        
        
    // Ausgabe: Das ist die Beschriftung eines Überschallflugzeuges
        
    echo preg_replace_callback($suchmustercallback$zeichenkette);
     
    ?>
    EDIT: Verdammt ! Toll, man sieht jetzt im Beispielstring $zeichenkette nicht, dass da die kodieren ANSI Zeichen drin sind, weil der Browser die direkt umsetzt. -.-
    Geändert von RedWraith (31.08.10 um 10:32 Uhr)
     

  8. #8
    Avatar von Alex_T
    Alex_T Alex_T ist offline Mitglied Brokat
    Registriert seit
    Jul 2009
    Beiträge
    311
    Grüße,

    also ich hab mir da mal inzwischen ne kleine Funktion gebastelt:

    PHP-Code:
    <?php
    function Zeichenersetzung ($Zeichenkette) {
        
    $Suchen = array("/Ä/""/Ö/""/Ü/""/ä/""/ö/""/ü/");
        
    $Ersetzen = array("Ä""Ö""Ü""ä""ö""ü");
        
        
    $Ausgabe_Zeichenkette str_replace($Suchen$Ersetzen$Zeichenkette);
        return 
    $Ausgabe_Zeichenkette;
    }
    ?>
    So wie das jetzt da oben steht ist das natürlich Quatsch, denn de gute Technik wandelt meinen Code-Post hier schon so um , wie du das auch machen willst .

    Also im Array Suchen kommen die Dez-Werte rein, die die vom Programm übergebene Zeichenkette in sich tragen kann:
    &#196; --> Ä,
    &#214; --> Ö,
    &#220; --> Ü,
    &#228; --> ä,
    &#246; --> ö,
    &#252; --> ü

    Dann rufst du die Funktion einfach auf der Zuweisungsseite einer Variablen auf und kannst dann mit dieser Variablen weiterarbeiten (Bsp. als String benutzen, der in die DB soll):

    PHP-Code:
    <?php
    $test 
    Zeichenersetzung($Zeichenkette_an_Funktion);
    ?>
    Ich hab das ganze auch mit der "M&#252;llerstraße" ausprobiert .
     
    Mfg, Alex

    “The function of good software is to make the complex appear to be simple.” (Grady Booch)
    “First, solve the problem. Then, write the code.” (John Johnson)

  9. #9
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    das ist eigentlich merkwürdig, html_entity_decode() sollte auch mit Notationen wie &#252; umgehen können. Mit welchen Zeichensätzen arbeitest du da?
     

  10. #10
    Avatar von Frezl
    Frezl Frezl ist offline Mitglied Brokat
    Registriert seit
    Oct 2003
    Beiträge
    473
    Nun gibt es dort teilweise Stringverknüpfungen. Zum Beispiel wenn ein Kunde wissen will, was diese Woche alles in die "Müllergasse" geliefert wird. Und naja... "Müllergasse" != "M&#252;llergasse"
    Das ist wieder das typische Problem, dass bei denen einer die Regeln von relationalen Datenbanken missachtet hat :-P
    Ich würde die Sache so angehen, dass ich versuchen würde, alles in UTF-8 umzustellen. Wenn du allerdings keine Möglichkeit hast, an der Datenbank was zu ändern, dann wirst du um die unschönen Basteleien nicht rumkommen...

    Wie Sven Mintel schon gemeint hat, müsste das aber mit html_entity_decode() klappen. Und falls nicht, ist im 1. Beispiel eine Workaround beschrieben.

    Grüße,
    Frezl
     
    Wenn du das Gefühl hast "Cool, der Kerl konnte mir echt helfen!", dann teil es mir mit, indem du mich entsprechend bewertest!

Ähnliche Themen

  1. Post-Daten abfragen?
    Von DataFox im Forum Javascript & Ajax
    Antworten: 8
    Letzter Beitrag: 03.01.08, 15:50
  2. Problem mit POST-Daten
    Von miRli im Forum PHP
    Antworten: 2
    Letzter Beitrag: 30.08.05, 16:24
  3. POST - Daten / Aktualisieren
    Von Eaden im Forum PHP
    Antworten: 2
    Letzter Beitrag: 19.04.05, 14:44
  4. POST-Daten per Adresszeile
    Von MAN im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 27.02.05, 04:01
  5. POST Daten per URL uebergeben?
    Von BeaTBoxX im Forum PHP
    Antworten: 1
    Letzter Beitrag: 03.05.04, 13:33