PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   setlocale + ctype_alpha (http://www.selfphp.de/forum/showthread.php?t=24732)

Auf der Mauer 09.09.2012 15:50:33

setlocale + ctype_alpha
 
Hallo,

ich habe ein ziemlich verrücktes Problem entdeckt.
Die Funktion ctype_alpha kennt ja keine Umlaute wie äöü und auch das scharfe ß ist ihr fern.
Wenn ich aber mit setlocale den Zeichensatz angebe, dann funktioniert ctype_alpha korrekt.

PHP-Code:

 // Lokaler Zeichensatz   
    
setlocale (LC_ALL'de_DE@euro''de_DE''de''ge');
 
    
$string "äöüß";
    
    if (
ctype_alpha($string) == TRUE) {
        echo 
"Nur Buchstaben";
    } else {
        echo 
"Nicht nur Buchstaben!";
    } 

Ich habe es genauso getestet, mit dem obigen Code und ctype_alpha funktioniert einwandfrei auch mit Umlauten.

Jetzt will ich ctype_alpha direkt in meinen Skripten anwenden, als
Ergebnis kommt aber fast immer FALSE raus, obwohl ja setlocal gesetzt ist.

Die Datei hat folgenden Aufbau:

PHP-Code:


/* In dieser Datei wurde das setlocal gesetzt + getestet
   Hier ist es in Ordnung mit äöüß */

   
require_once('../p/web/session.php');

// Hier kommt das Skript
//
// Lümmel = TRUE
// Übel = FALSE
// Bäcker = FALSE
// Döner = LECKER
// Mörtel = FALSE
// 

Sowohl ö,ä als auch ß werden nicht mehr als Buchstaben erkannt, ü dagegen schon.
Wie kann das sein? Enweder ctype_alpha kennt die Umlaute oder nicht.
Warum nur das ü und warum nur als Kleinbuchstabe?

Sicher gibt es auch andere Wege für die Überprüfung eines Strings, aber wieso
funktioniert ctype_alpha in der session.php Datei einwandfrei und im darunterliegenden Skript (in derselben Datei!) nicht mehr?
Warum wird von den Umlauten immerhin doch noch 1 erkannt?

Bin für Tipps dankbar

Gruß
Auf der Mauer

meikel (†) 11.09.2012 19:14:33

AW: setlocale + ctype_alpha
 
1.
Zitat:

Zitat von Handbuch
Die Locale-Informationen wirken auf den Prozess, nicht auf den Thread. Sofern Sie PHP mit einer Multithreaded Server API wie IIS oder Apache unter Windows einsetzen, rechnen Sie mit unerwarteten Änderungen der Locale-Einstellungen zur Laufzeit des Skripts, auch wenn das Skript selbst keinen setlocale()-Aufruf durchführt. Dies passiert, da andere Skripte in verschiedenen Threads des selben Prozesses zur selben Zeit prozessweit die Locale-Einstellungen mittels setlocale() ändern.

2. welche PHP Version?

Auf der Mauer 12.09.2012 12:39:10

AW: setlocale + ctype_alpha
 
Hallo Meikel,

danke für die Antwort!

Die PHP Version ist 5.2.17.

Bedeutet das, dass ich die setlocale nicht allgemein in die session.php schreiben soll, da es keinen Vorteil bringt?
Normalerweise können ja mehrere php Dateien problemlos ineinander verschachtelt sein.
In dem Fall dachte ich, dass setlocale für alle Dateien gilt, welche in dieser Datei mit eingebunden sind.

Also MUSS setlocale wohl direkt an der Stelle eingebunden werden an der es benötigt wird.

Gruß
Auf der Mauer

meikel (†) 12.09.2012 16:31:56

AW: setlocale + ctype_alpha
 
Zitat:

Zitat von Auf der Mauer (Beitrag 143668)
Die PHP Version ist 5.2.17.

Älter als die Steinkohle. Aktuell ist PHP 5.4.6.
http://www.php.net/archive/2012.php#id2012-08-16-1

Zitat:

Bedeutet das, dass ich die setlocale nicht allgemein in die session.php schreiben soll, da es keinen Vorteil bringt?
Du hast doch den Text gelesen, daß sich setlocale auf den Prozeß auswirkt.
Mit (fast)CGI haste da bessere Karten, weil dann der Apache einen CGI Prozeß für das betreffende Script generiert. Beim apache2handler biste auf die Gnade der 99 Nachbarn angewiesen, daß die dann kein setlocale verwenden.


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:39:56 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.