setlocale
am 18.07.2006 12:35:21 von Manfred Bauer
Habe zumersten mal versucht, setlocale zu verwenden, und bin gleich
vielfach gescheitert ...
Worauf wirkt diese Einstellung? Wo ist das beschrieben? Und wie schalte
ich es temporär ab, um einen sql-string zu erzeugen, wo die Zahlen keine
"," enthalten?
W
Re: setlocale
am 20.07.2006 16:34:31 von dev-null-use-reply-adress
Manfred Bauer schrieb:
> Habe zumersten mal versucht, setlocale zu verwenden, und bin gleich
> vielfach gescheitert ...
Mit dieser Fehlerbeschreibung lässt sich Dir kaum helfen?
> Worauf wirkt diese Einstellung?
Auf verschiedene Funktionen, welche die locale Einstellung
berücksichtigen.
> Wo ist das beschrieben?
Die Frage kann nicht ernst gemeint sein. Aber gut, im Manual:
http://de.php.net/setlocale
> Und wie schalte ich es temporär ab, um einen sql-string
> zu erzeugen, wo die Zahlen keine "," enthalten?
Was willst Du abschalten? Wo kommen die Kommas her?
Sind das vielleicht Strings mit Komma als Dezimaltrenner,
die aber eigentlich Zahlen sein sollen? setlocale() wird
Dir in diesem Falle nicht helfen.
Bitte beschreibe Dein Problem genauer. Den hier eigentlich
obligatorischen FAQ-Hinweis (1.17) spare ich mir jetzt mal. ;-)
> W
E
Gruß
JPM
Re: setlocale
am 20.07.2006 19:51:35 von Manfred Bauer
Jens Peter Moeller schrieb:
> Manfred Bauer schrieb:
>> Habe zumersten mal versucht, setlocale zu verwenden, ...
>> Worauf wirkt diese Einstellung?
>
> Auf verschiedene Funktionen, welche die locale Einstellung
> berücksichtigen.
es sieht so aus, als würde (angenommen übliche german locale) ein
echo 2*4.1
den string
8,2
ausgeben
>> Wo ist das beschrieben?
> Die Frage kann nicht ernst gemeint sein. Aber gut, im Manual :
> http://de.php.net/setlocale
dort steht echt nix über die Wirkung. zB nix darüber, ob ich bei
eingestellter locale (german, siehe oben)
$x = 2*$_POST['eingegebene_zahl']
korrekt verarbeiten kann, wenn der User im Formular "1.700,32"
eingegeben hat.
>> Und wie schalte ich es temporär ab, um einen sql-string
>> zu erzeugen, wo die Zahlen keine "," enthalten?
ich wollte
$zahl=111.2;
$sql="insert into tab_1 (zahl) values(" . $zahl*2 . ")";
erzeugen und dies auf die Datenbank loslassen. Sieht aber hier so aus,
als würde ein 222,4 draus. Deshalb würd ich gern eine "englische" locale
oder eine "sql-locale" (er)finden.
> Bitte beschreibe Dein Problem genauer.
Ist es jetzt klarer? Danke für deine Mühe!
W
Re: setlocale
am 21.07.2006 10:35:23 von dev-null-use-reply-adress
Manfred Bauer schrieb:
> Jens Peter Moeller schrieb:
>> Manfred Bauer schrieb:
>>> Habe zumersten mal versucht, setlocale zu verwenden, ...
>>> Worauf wirkt diese Einstellung?
>>
>> Auf verschiedene Funktionen, welche die locale Einstellung
>> berücksichtigen.
>
> es sieht so aus, als würde (angenommen übliche german locale) ein
> echo 2*4.1
> den string
> 8,2
> ausgeben
Ausgegeben, richtig. Gerechnet wird trotzdem mit 8.2.
> $x = 2*$_POST['eingegebene_zahl']
> korrekt verarbeiten kann, wenn der User im Formular "1.700,32"
> eingegeben hat.
Heraus käme 3,4 bei deutscher locale-Einstellung, aber eben nur in
der Ausgabe, intern ist es immer noch die Dezimalzahl 3.4.
PHP kann den String "1.700,32" nicht als "deutsch" formatierte Dezimalzahl
erkennen, egal mit welcher locale-Einstellung.
Du wirst eigene Routinen dafür schreiben müssen, wenn Du den Anwendern
so eine Eingabe gestattest.
>>> Und wie schalte ich es temporär ab, um einen sql-string
>>> zu erzeugen, wo die Zahlen keine "," enthalten?
>
> ich wollte
> $zahl=111.2;
> $sql="insert into tab_1 (zahl) values(" . $zahl*2 . ")";
> erzeugen und dies auf die Datenbank loslassen. Sieht aber hier so aus,
> als würde ein 222,4 draus.
Ja, vermutlich wird hier in der Tat 222,4 in die DB geschrieben.
> Deshalb würd ich gern eine "englische" locale
> oder eine "sql-locale" (er)finden.
Wofür brauchst Du denn überhaupt eine deutsche locale-Einstellung?
Für Datums- und Zeit-Ausgaben? Dann beschränke es darauf und Du hast
den Zahlenwirwar nicht mehr.
setlocale(LC_TIME, 'de_DE');
Oder stelle generell Englisch ein:
setlocale(LC_ALL, 'en_EN');
Gruß
JPM
Re: setlocale
am 21.07.2006 11:15:02 von Thomas Rachel
Manfred Bauer wrote:
> es sieht so aus, als würde (angenommen übliche german locale) ein
> echo 2*4.1
> den string
> 8,2
> ausgeben
Möglich - aber innerhalb des Apache-Prozesses ist eine deutsche Locale eher
unüblich. (Es sei denn, Du hast es explizit so eingestellt)
>>> Und wie schalte ich es temporär ab, um einen sql-string
>>> zu erzeugen, wo die Zahlen keine "," enthalten?
Dann muÃt Du temorär nochmal zurück in die "übliche" Locale ("C" bzw.
"POSIX" wechseln, dann sollte es passen.
Thomas
Re: setlocale
am 21.07.2006 18:18:50 von Manfred Bauer
Jens Peter Moeller schrieb:
> Manfred Bauer schrieb:
>> $x = 2*$_POST['eingegebene_zahl']
>> korrekt verarbeiten kann, wenn der User im Formular "1.700,32"
>> eingegeben hat.
>
> Heraus käme 3,4 bei deutscher locale-Einstellung, aber eben nur in
> der Ausgabe, intern ist es immer noch die Dezimalzahl 3.4.
> PHP kann den String "1.700,32" nicht als "deutsch" formatierte Dezimalzahl
> erkennen, egal mit welcher locale-Einstellung.
ja genau ... ich dachte, man könne bei einer einigermassen
internationalen Anwendung den Benutzer zuerstmal die locale wählen, und
danach Zahlen, Datum etc in seiner gewohnten Weise eingeben lassen. Aha,
ich muss also die locale-settings nochmal lesen, und meine eigenen
Parser schreiben, um die eingegebenen Zahlen auch zu verstehen. Für
einige der westeuropäischen Sprachen werd ich das ja auch
zusammenbringen ...
Ich hab' auch die Antwort bekommen, es sei beim Apache nicht "üblich"
.... eh nicht, ich hab es (absichtlich) so eingestellt, denn:
soweit ich gesehen habe, hat es auch auf die Großschreibung von
deutschen Umlauten (mb_convert_case(..., MB_TITLES, "UTF8") Einfluss,
oder? Oder wie sonst ...?
Manf