RegExp und Umlaute

RegExp und Umlaute

am 14.07.2006 20:59:56 von Christoph Weis

Hallo,

folgendes verwende ich, um einen String zu bearbeiten:

if (!preg_match("/^([a-zA-Z0-9öäüß. '-]+)$/is",
$_SESSION[vorname])) $error['vorname'] =3D "Vorname fehlt oder
enthält nicht erlaubte Zeichen! ";

Das funktioniert bei mir lokal (WIN XP)
Aber Online (Linux dd11528 2.6.16.12-nmm1 #1) werden die Umlaute nicht
erlaubt.
Unter WIN funktioniert es aber.

Habe ich etwas übersehen?

Über Hilfe würde ich mich freuen.

Gruß
Christoph

Re: RegExp und Umlaute

am 14.07.2006 21:32:41 von Carsten Wiedmann

Christoph Weis schrieb:

> if (!preg_match("/^([a-zA-Z0-9öäüß. '-]+)$/is",
> $_SESSION[vorname])) $error['vorname'] = "Vorname fehlt oder
^^^^^^^ <-- hier fehlten zwei Quotes aussen herum
> enthält nicht erlaubte Zeichen! ";
>
> Das funktioniert bei mir lokal (WIN XP)
> Aber Online (Linux dd11528 2.6.16.12-nmm1 #1) werden die Umlaute nicht
> erlaubt.
> Unter WIN funktioniert es aber.

Was spricht ein:
| echo var_dump('ä');
| echo var_dump($_SESSION['vorname']);
| exit;
vor diesem if?

Gruß
Carsten

Re: RegExp und Umlaute

am 14.07.2006 22:02:38 von Christoph Weis

Carsten Wiedmann schrieb:

> Was spricht ein:
> | echo var_dump('ä');
> | echo var_dump($_SESSION['vorname']);
> | exit;
> vor diesem if?


Hallo Carsten,

also im Browser sieht es so aus:
string(1) "ä¢=8Astring(9) "Christoph"

im Quelltext so:
string(1) "ä"
string(9) "Christoph"

Gruß
Christoph

Re: RegExp und Umlaute

am 14.07.2006 23:37:30 von Carsten Wiedmann

Christoph Weis schrieb:

> Carsten Wiedmann schrieb:
>
> > Was spricht ein:
> > > echo var_dump('ä');
> > > echo var_dump($_SESSION['vorname']);
> > > exit;
> > vor diesem if?
>
> also im Browser sieht es so aus:
> string(1) " string(9) "Christoph"
>
> im Quelltext so:
> string(1) "ä"
> string(9) "Christoph"

Das du im Browser das "ä" nicht siehst (?), deutet es wohl schon an. Ich
hätte es vielleicht dazuschreiben sollen damit das klar ist... aber der
Vorname bei diesem Test (was über die Session kommt) sollte natürlich auch
einen Umlaut enthalten.

Gruß
Carsten

Re: RegExp und Umlaute

am 15.07.2006 08:09:14 von Christoph Weis

Carsten Wiedmann schrieb:

> Das du im Browser das "ä" nicht siehst (?), deutet es wohl schon an. Ich
> hätte es vielleicht dazuschreiben sollen damit das klar ist... aber der
> Vorname bei diesem Test (was über die Session kommt) sollte natürlich=
auch
> einen Umlaut enthalten.

Ok.Habe nicht mitgedacht.

Jetzt das Ergebnis im Quelltext:

string(1) "ä"
string(7) "Jürgen" -> Eingabe war Jürgen

Christoph

Re: RegExp und Umlaute

am 15.07.2006 09:04:17 von Matthias Esken

On 14 Jul 2006 23:09:14 -0700, Christoph Weis wrote:

> Jetzt das Ergebnis im Quelltext:
>
> string(1) "ä"
> string(7) "Jürgen" -> Eingabe war Jürgen

Das sieht schwer nach UTF-8 aus, das als ISO-8859-1 verarbeitet wird. Mach
mal ein utf8_decode() auf den String.

Gruß,
Matthias

Re: RegExp und Umlaute

am 15.07.2006 11:39:15 von unknown

Post removed (X-No-Archive: yes)

Re: RegExp und Umlaute

am 15.07.2006 13:49:04 von Christoph Weis

Hallo Matthias, hallo Dirk,

ich habe mich leider noch nicht mit dem Thema richtig befasst.
(decoding u. sessions)

Folgenden Code habe ich jetzt im Einsatz:

Zuvor übergebe ich den Formular-Value:

$_SESSION['vorname'] =3D $_POST['vorname'];


echo utf8_decode($_SESSION['vorname']); -> ergibt: Jürgen

echo $_POST['vorname']; -> ergibt: Jürgen

Im des PHP-files habe ich:


Verstehe ich alles nicht.
Haben SESSIONS andere Auswirkungen auf Umlaute?

Gruß
Christoph

Re: RegExp und Umlaute

am 16.07.2006 13:50:11 von unknown

Post removed (X-No-Archive: yes)

Re: RegExp und Umlaute

am 16.07.2006 15:04:19 von Carsten Wiedmann

Christoph Weis schrieb:

> Jetzt das Ergebnis im Quelltext:
>
> string(1) "ä"
> string(7) "Jürgen" -> Eingabe war Jürgen

Schön. Die PHP-Datei ist also Latin1 kodiert, erhälst vom Browser aber
utf8-kodierte Strings über das Formular.

> if (!preg_match("/^([a-zA-Z0-9öäüß. '-]+)$/is",
> $_SESSION[vorname])) $error['vorname'] = "Vorname fehlt oder
> enthält nicht erlaubte Zeichen! ";

Dein preg_match() prüft also z.B., ob ("ü" == "ü") ist. Das ergibt
natürlich keine Übereinstimmung. Du musst also dafür sorgen, dass entweder
("ü" == "ü") oder ("ü" == "ü") getestet wird. Oder anders gesagt:
a) du kodierst "$_SESSION[vorname]", für das preg_mach(), um nach
iso-8859-1,
b) oder du kodierst die Zeichen im Pattern um nach utf8 und sagst
preg_mach() das du utf8-Verarbeitung wünscht.

a) wäre dann
| preg_match("/^([a-zA-Z0-9öäüß. '-]+)$/is",
utf8_decode($_SESSION[vorname]))

b) wäre dann
| preg_match("/^([".utf8_encode("a-zA-Z0-9öäüß. '-")."]+)$/isu",
$_SESSION[vorname])

Gruß
Carsten

Re: RegExp und Umlaute

am 17.07.2006 08:41:29 von Christoph Weis

Ok, Dirk u. Carsten, vielen Dank.

Es ist zwar etwas verwirrend, aber irgendwie bekomme ich das hin, hoffe
ich.
Selbst diese Beiträge hier in GoogleGroups werden unterschiedlich
dargestellt.
In einem Beitrag sind die Umlaute zu erkennen im darauffolgenden schon
wieder nicht mehr. Obwohl sie sich auf ein und der selben Seite
befinden.
Bin mal gespannt wie es dann unter MAC OS aussehen wird.

Also vielen Dank nochmal.

Gruß
Christoph