Umlaute nach Wandlung mit Strtoupper

Thema wurde von BH8, 12. August 2011 erstellt.

  1. BH8

    BH8 Erfahrener Benutzer

    Registriert seit:
    7. Juni 2011
    Beiträge:
    146
    Danke erhalten:
    5
    Danke vergeben:
    7
    Hallo wir haben uns in der create_account.php ein eigenes Feld für die Tabelle customers erstellt.

    Und zwar benötigen wir in unserer Warenwirtschaft ein Feld matchcode, welches aus der PLZ und der ersten 4 Buchstaben der Straße gebildet sein muß.

    habe dazu in der og. Datei folgenden Quellcode geschrieben:

    PHP:
    //Felderweiterung Matchcode ANFANG 
            
    $matchcode xtc_db_prepare_input($_POST['postcode']).substr(xtc_db_prepare_input($_POST['street_address']),0,4); 
            
    $matchcode strtoupper($matchcode); 
        
    //Felderweiterung Matchcode ENDE  
    Nun passiert folgendes kurioses mit der Bitte, ob jemand eine Idee hat, das zu lösen:
    Wenn PLZ = 10900 und Straße = äöüßtrasse ist entsteht das feld matchcode = 10900ÄÖÜß
    wenn die PLZ = 10900 und die Straße = Schützen... dann entsteht im Feld matchcode = 10900SCHü wobei das ü so wie ein kleingeschriebenes großes ü ist (glaube heißt KAPITÄLCHEN)

    Hat jemand ne Idee, woran das liegt und im 2. Fall einfach so kurios entsteht?
     
  2. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Hallo,

    das ü in Schützen ist vermutlich ein anderes Sonderzeichen und nicht das normale Ü. Anders lässt sich das Phänomen nicht erklären. Habe keine Lösung parat.
     
  3. BH8

    BH8 Erfahrener Benutzer

    Registriert seit:
    7. Juni 2011
    Beiträge:
    146
    Danke erhalten:
    5
    Danke vergeben:
    7
    Hallo Moritz,

    danke für die Antwort, aber es ist ein RICHTIGES ü.
    Du kannst das bestimmt nachstellen.
    Registriere Dich doch mal und Gebe als Straße Schützenstrasse ein.

    Unser Shop ist http://shop.miniskreativ.de

    Die Zugangsdaten habt ihr ja und da kannst Du dann in der Datenbank im Feld matchcode dieses Phänomen sehen.

    Wäre schön, wenn wir das hinbekommen.
     
  4. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Versuche mal, das Feld mit "htmlspecialchars_decode" zu bearbeiten.
     
  5. BH8

    BH8 Erfahrener Benutzer

    Registriert seit:
    7. Juni 2011
    Beiträge:
    146
    Danke erhalten:
    5
    Danke vergeben:
    7
    #5 BH8, 13. August 2011
    Zuletzt bearbeitet: 13. August 2011
    Was meinst Du damit? was muß ich da machen?

    also meinst Du das so?

    PHP:
    //Felderweiterung Matchcode ANFANG 
            
    $matchcode xtc_db_prepare_input($_POST['postcode']).substr(xtc_db_prepare_input($_POST['street_address']),0,4); 
            
    $matchcode strtoupper($matchcode);
            
    $matchcode htmlspecialchars_decode($matchcode);
        
    //Felderweiterung Matchcode ENDE  
    das habe ich mal grade ausprobiert, es geht nicht und im Feld steht dann wieder 36433SCHü und nicht SCHÜ

    Wo liegt hier der Haken, bin am verzweifeln
     
  6. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Avenger, wenn dann macht doch nur html_entity_decode Sinn, oder? Aber ein HTML-Umlaut kann es doch eigentlich nicht sein, da ja sonst Ü statt ü ausgegeben werden müsste.
     
  7. BH8

    BH8 Erfahrener Benutzer

    Registriert seit:
    7. Juni 2011
    Beiträge:
    146
    Danke erhalten:
    5
    Danke vergeben:
    7
    Hallo Moritz,

    was doch aber seltsam ist dass aus äöüßtraße --> richtig ÄÖÜß wird und wenn die Straße z.B. Schützen... ist dann das mit dem Umlaut ü nicht funzt ?!?!?
     
  8. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Probiere es damit:
    PHP:
    //Felderweiterung Matchcode ANFANG 
            
    $matchcode xtc_db_prepare_input(html_entity_decode($_POST['postcode'])).substr(xtc_db_prepare_input(html_entity_decode($_POST['street_address'])),0,4); 
            
    $matchcode strtoupper($matchcode);
        
    //Felderweiterung Matchcode ENDE  
    Falls $matchcode in die Datenbank geschrieben wird, solltest du den Wert einmal durch xtc_db_input oder mysql_real_escape_string jagen. xtc_db_prepare_input (xt-Commerce hat da einen sehr unglücklichen Namen gewählt) macht übrigens genau das Gegenteil, entfernt nämlich Slashes vor Anführungszeichen (stripslashes).
     
  9. BH8

    BH8 Erfahrener Benutzer

    Registriert seit:
    7. Juni 2011
    Beiträge:
    146
    Danke erhalten:
    5
    Danke vergeben:
    7
    #9 BH8, 14. August 2011
    Zuletzt bearbeitet: 14. August 2011
    Hallo Moritz,

    danke Dir, habe den Code jetzt so reingeschrieben, aber es steht nach Anmeldung immer noch SCHü in dem Feld.
    Oder was meinst Du jetzt noch mit "xtc_db_input oder mysql_real_escape_string jagen."
    Kannst Du mir bitte noch die Zeile machen?

    Bisher sieht es so aus, habe, wie die anderen Felder ja auch in die Datenbank geschrieben werden:
    PHP:
    //Felderweiterung Matchcode ANFANG
    $sql_data_array['matchcode'] = $matchcode;
    //Felderweiterung Matchcode ENDE
    geschrieben.

    Ich hab jetzt nochmal probiert, wenn ich bei der Registrierung die Straße selbst gleich in GROß schreibe also z.B. SCHÜTZENSTRAßE
    und habe das strotoupper mal weggelassen, dann steht es richtig mit SCHÜ in der Datenbank,
    also kann es ja nicht an der Übertragung der Variable $matchcode an die Datenbank liegen, sondern an dieser Umwandlung von den Umlauten .

    Irgendwie muß man das doch "knacken" können...

    Hast Du dich mal angemeldet und mal registriert mit so einem Beispiel?


    Danke im Voraus
     
  10. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Funktioniert das angehängte Testscript auf deinem Server? Ich kann weiterhin nicht nachvollziehen, warum es bei dir nicht geht.
     

    Anhänge:

    • test.php
      Dateigröße:
      535 Bytes
      Aufrufe:
      6
  11. BH8

    BH8 Erfahrener Benutzer

    Registriert seit:
    7. Juni 2011
    Beiträge:
    146
    Danke erhalten:
    5
    Danke vergeben:
    7
    Mallo Mortitz,

    Ein MA von Euch hat mit gesendet, ""Beachten Sie, dass die Erkennung von 'Buchstaben' vom Wert locale abhängig ist. Ist z. B. die Voreinstellung für locale "C", werden Sonderzeichen wie Umlaute (ä, ö, ü) nicht umgewandelt. Wenden Sie sich einmal an Ihren Provider..."

    Habe unseren Privider kontaktiert, der uns wiederum schrieb, dass wir folgendes in die Datei /lang/german/german.php schreiben sollen:
    PHP:
    setlocale(LC_ALL'de_DE@euro''de_DE''deu_deu');
    Dort stand steht ja schon die Zeile:
    PHP:
    @setlocale(LC_TIME'de_DE@euro''de_DE''de-DE''de''ge''de_DE.ISO_8859-1''German','de_DE.ISO_8859-15''de_DE.utf8');
    bei dieser ist mir komisch das Zeichen@ am Anfang ?????
    Ist das auch so was wie "Kommentar", dann hat das ja gar nicht gegriffen?

    habe diese jedenfalls auskommentiert und die o.g. Eingefügt.

    Nun geht es.

    Bitte mal um Antwort zu den o.g. Fragen - Vielen Dank

    Viele Grüße
    Olaf
     
  12. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Hallo,

    @ bedeutet, dass der Code ausgeführt wird aber im Fehlerfall keine Fehlermeldung verursacht. Ich gehe aktuell davon aus, dass auf deinem Server deu_deu als "deutsche Sprache" installiert ist, die im Standard bei uns nicht dabei ist und daher bei dir vorher keiner der locales getroffen hat.
     
  13. BH8

    BH8 Erfahrener Benutzer

    Registriert seit:
    7. Juni 2011
    Beiträge:
    146
    Danke erhalten:
    5
    Danke vergeben:
    7
    Besten Dank Moritz, jetzt funzt es ja.
    Mal noch ne Frage: kann man diese Zeile mit dem setlocale, also die nun greift, auch in die create_account.php gleich oben einfügen?
    Damit müßte es dann doch auch gehen?
     
  14. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Das könntest du tun, aber die german.php ist schon ein guter Ort, damit auch die anderen Scripte des Shops Deutsch "verstehen".
     
  15. BH8

    BH8 Erfahrener Benutzer

    Registriert seit:
    7. Juni 2011
    Beiträge:
    146
    Danke erhalten:
    5
    Danke vergeben:
    7
    Okay, danke, hat mir sehr geholfen :)