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?
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.
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.
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
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.
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 ?!?!?
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).
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
Funktioniert das angehängte Testscript auf deinem Server? Ich kann weiterhin nicht nachvollziehen, warum es bei dir nicht geht.
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
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.
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?
Das könntest du tun, aber die german.php ist schon ein guter Ort, damit auch die anderen Scripte des Shops Deutsch "verstehen".