php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 10-07-2007, 12:17
AdamP
 Newbie
Links : Onlinestatus : AdamP ist offline
Registriert seit: Jul 2007
Beiträge: 9
AdamP ist zur Zeit noch ein unbeschriebenes Blatt
Standard Fehler bei Formularvariable mit Umlaut

Ich habe ein Problem beim Abfragen einer Variablen, die in einem Formular mittels POST übergeben wird.
Es geht um eine Benutzeranmeldung. Wenn der Benutzer die Daten abgeschickt hat und es Fehler im Formular gegeben hat, dann werden die fehlerhaften Felder markiert und die alten Eingaben werden wieder eingetragen (ist sonst nervig, wenn man irgendwo einen Fehler gemacht hat und nochmal alle 10 anderen Angaben wiederholen muss).

Das Problem taucht auf, wenn ich in einem Select-Element prüfen möchte, welchen Eintrag (Land) der User ausgewählt hat.
Für Deutschland und die Schweiz funktioniert das ohne Probleme.
Nur wenn ich Österreich angegebene habe, scheitert die Überprüfung.

Hier der Ausschnitt aus dem Quellcode:
PHP-Code:
echo "<select type=\"text\" name=\"land\" size=\"1\">
          <option value=\"Deutschland\" "
;     if ($_REQUEST["land"]=="Deutschland") {echo "selected";} echo ">Deutschland
          <option value=\"&Ouml;sterreich\" "
; if ($_REQUEST["land"]=='Österreich')  {echo "selected";} echo ">&Ouml;sterreich
          <option value=\"Schweiz\" "
;         if ($_REQUEST["land"]=="Schweiz")     {echo "selected";} echo ">Schweiz
      </select>"

Ich habe es auch schon mit if ($_REQUEST["land"]=='& Ouml;sterreich') versucht. Klappt leider auch nicht.
Wo liegt das Problem? Wenn ich die Variable mittels echo ausgebe, wird "Österreich" angezeigt.

Würde mich freuen, wenn jemand eine Lösung weiß.
Mit Zitat antworten
  #2 (permalink)  
Alt 10-07-2007, 12:19
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

dein editor benutzt wohl utf-8, während die seite in iso 8859-1 ausgegeben wird.

für solche zwecke kodiert man das land mit einer zahl oder einem kürzel (de, au, ch), um kodierungsprobleme zu vermeiden.
Mit Zitat antworten
  #3 (permalink)  
Alt 10-07-2007, 12:35
AdamP
 Newbie
Links : Onlinestatus : AdamP ist offline
Registriert seit: Jul 2007
Beiträge: 9
AdamP ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Kann gut sein. Na gut, dann mache ich es halt über diesen kleinen Umweg.

Danke.
Mit Zitat antworten
  #4 (permalink)  
Alt 10-07-2007, 12:36
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

warum ist das ein umweg? das ist sogar sparsamer bzgl. traffic und resistenter gegen kodierungsunterschiede.
Mit Zitat antworten
  #5 (permalink)  
Alt 10-07-2007, 20:40
AdamP
 Newbie
Links : Onlinestatus : AdamP ist offline
Registriert seit: Jul 2007
Beiträge: 9
AdamP ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Umweg deshalb, weil ich die übergebene Values gleich in der Datenbank speichern wollte.
Ist aber vielleicht etwas gefährlich, weil man so ungewünschte Werte in die DB schreiben kann, also passt der "Umweg" dann schon - hab es jetzt so implementiert, mit dem de/ch/au.

Traffic macht bei den paar Byte kaum einen Unterschied. Da müsste ich schon Millionen Pagehits pro Monat haben, bis das ins Gewicht fällt - aber im Prinzip hast du Recht

Jetzt stellt sich mir aber ein weiteres Problem:
Ich checke sämtliche Eingaben auf Gültigkeit. So dürfen Namen nur aus Buchstaben bestehen.
Dies prüfe ich so:
PHP-Code:
function check ($input)
{
    if (
preg_match("/^[ a-za-zäöüß]+$/i",$input)) { return true; } else { return false; }
}

if (
check($_REQUEST["strasse"])) ... 
Wenn ich aber eine Eingabe wie "Apfelstraße" checken lasse, bekomme ich eine Fehlermeldung.
Wie kann ich dieses Problem umgehen? Vorher im PHP-Skript alle Vorkommen von ä,ö,ü,ß gegen ae, oe, ue, ss tauschen? Ist nicht gerade die eleganteste Lösung.

Wie kann ich die Codierung herausfinden oder ändern?
Ich habe den Befehl iconv (in, out, string) gefunden um von einem Charakter-Set zum anderen zu konvertieren. Würde das damit gehen?
Dazu müsste ich aber auch wissen von welcher Codierung ich in welche wechseln muss.
Mit Zitat antworten
  #6 (permalink)  
Alt 10-07-2007, 21:04
novara
 Member
Links : Onlinestatus : novara ist offline
Registriert seit: Jul 2001
Ort: Flensburg
Beiträge: 402
novara ist zur Zeit noch ein unbeschriebenes Blatt
Standard php, html und formular den charset mitteilen

Hallo, ich hatte auch mal ein ähnliches Problem, Deine Seite arbeitet wahrscheinlich als ISO, Deine Formulardaten werden aber als UTF-8 übergeben. Schreibe in den form Tag accept-charset="ISO-8859-1" rein, vielleicht ist Dein Problem dann behoben, ansonsten per utf8_encode($variable) alle Forumlardaten wieder "lesbar" machen.
__________________
Mit freundlichen Grüßen
Werner
Mit Zitat antworten
  #7 (permalink)  
Alt 10-07-2007, 21:19
AdamP
 Newbie
Links : Onlinestatus : AdamP ist offline
Registriert seit: Jul 2007
Beiträge: 9
AdamP ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das mit dem accept-charset habe ich probiert, das klappte leider nicht.
utf8_encode() habe ich versucht, das hat auch nicht funktioniert. Die Umlaute und das ß wurden dann nur als ? dargestellt.

Ich arbeite auf einem Mac System mit Mac OS X. Vielleicht hilft das ja weiter.
Bin etwas ratlos und suche schon die ganze Zeit nach einer Antwort im Internet
Mit Zitat antworten
  #8 (permalink)  
Alt 10-07-2007, 21:47
novara
 Member
Links : Onlinestatus : novara ist offline
Registriert seit: Jul 2001
Ort: Flensburg
Beiträge: 402
novara ist zur Zeit noch ein unbeschriebenes Blatt
Standard Poste mal

Hast Du Dir mal die Umlaute ausgeben lassen und geprüft welche Zeichenkodierung der Browser nutzt? Poste mal die Ausgaben, auch die Fehlermeldungen. Ansonsten die ganze Seite und auch die DB auf UTF-8 stellen und auch den connect zur DB anpassen, dann gehts Du den Problemen aus dem Weg,
__________________
Mit freundlichen Grüßen
Werner
Mit Zitat antworten
  #9 (permalink)  
Alt 10-07-2007, 22:09
karltofel
 Newbie
Links : Onlinestatus : karltofel ist offline
Registriert seit: Jul 2007
Beiträge: 12
karltofel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du solltest auch gleich im header dem Browser sagen das es UTF-8 ist.
Ich geh das meist so an:

php:
header('Content-type: text/html; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';


html:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />


und bei mysql:
SET NAMES utf8;

oder os da bin ich mir nicht sicher obs nicht was besseres gibt ...
Mit Zitat antworten
  #10 (permalink)  
Alt 10-07-2007, 22:23
AdamP
 Newbie
Links : Onlinestatus : AdamP ist offline
Registriert seit: Jul 2007
Beiträge: 9
AdamP ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Na gut... folgender Code:

Im Header gebe ich aus:

<meta http-equiv="content-type" content="text/html;charset=iso-8859-15">
echo "ä ö ü ß" ergibt: � � � §
-----

<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
echo "ä ö ü ß" ergibt: Š š Ÿ §
-----
<meta http-equiv="content-type" content="text/html;charset=utf-8">
echo "ä ö ü ß" ergibt: � � � �
-----

Mit der DB gibt es erstmal so keine Probleme.
Wenn ich da "Apfelstraße" in einem Formular eingebe und es so speichere, wird das ß korrekt gespeichert und wieder gelesen.

Geändert von AdamP (10-07-2007 um 22:26 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 10-07-2007, 23:59
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von AdamP
Im Header gebe ich aus:
Diese Angabe hat weniger Priorität, also eine vom Server in den HTTP Response Headern gemachte - stimmt die denn, wenn vorhanden?

Und in welcher Kodierung hast du die Datei denn jetzt wirklich abgespeichert?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #12 (permalink)  
Alt 11-07-2007, 00:43
AdamP
 Newbie
Links : Onlinestatus : AdamP ist offline
Registriert seit: Jul 2007
Beiträge: 9
AdamP ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von wahsaga Diese Angabe hat weniger Priorität, also eine vom Server in den HTTP Response Headern gemachte - stimmt die denn, wenn vorhanden?
Ist damit der Befehl header() gemeint? Oder wie kann ich das bewerkstelligen?

Zitat:
Original geschrieben von wahsaga Und in welcher Kodierung hast du die Datei denn jetzt wirklich abgespeichert?
Ich habe die Webseite mit der Zend IDE unter Mac OS X erstellt. Voreingestellt als Encoding war "default". Leider nicht sehr hilfreich.
Habe es jetzt auf iso-8859-1 eingestellt - oder soll es doch lieber utf-8 sein?

Alles ganz schön frustrierend, dass einen so eine Kleinigkeit so lange aufhalten kann
Vielleicht stelle ich mich auch nur etwas ungeschickt an, aber ich habe jetzt schon mehrere Seiten zu ähnlichem Thema im Netz gefunden.

Probiere es morgen mal weiter... danke euch allen für die vielen Tipps!

/ Edit:
Habe den Fehler gefunden!
Es war anscheinen weder utf-8 noch iso-8859 eingestellt. Sondern "default".
Und was das heißt... keine Ahnung
Habe es jetzt in der IDE auf iso-8859-1 eingestellt und auf einmal funktioniert alles. Super, vielen Dank nochmal
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:54 Uhr.