zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden strcoll und setlocale unter Mac OS X

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 18.05.2009, 20:09
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.956
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard strcoll und setlocale unter Mac OS X

Ich sitze gerade an einem blödem Problem und weiß nicht, ob es ein Bug in PHP ist oder ob ich mich nur zu dumm anstelle. Normalerweise sollte man mit strcoll() zwei Strings in Abhängigkeit der eingestellten Locale vergleichen können. Folgendes UTF-8-kodiertes Testscript dafür:
PHP-Code:
<?php

if (defined('PHP_OS')) {
    if (
stristr(PHP_OS'darwin')) {
        
$locale 'de_DE.UTF-8';
    } elseif (
stristr(PHP_OS'win')) {
        
$locale 'German_Germany.65001';
    } else {
        
$locale 'de_DE.UTF8';
    }
} else {
    
$locale 'de_DE.UTF8';
}

$string "abcdefghijklmnopqrstuvwxyzäöüß";

$array = array();

for (
$i=0$i<mb_strlen($string'UTF-8'); $i++) {
    
$array[]=mb_substr($string$i1'UTF-8');
}

$oldLocale setlocale(LC_COLLATE"0");

print(
"\nAlt: $oldLocale Neu: ");
print(
setlocale(LC_COLLATE$locale));
usort($array'strcoll');
setlocale(LC_COLLATE$oldLocale);
print(
"\n" implode(''$array) . "\n");

?>
Auf meinem Webserver (Linux, PHP 5.2.6) liefert mir das auch wie erwartet folgende Ausgabe:
Code:
Alt: C Neu: de_DE.UTF8
aäbcdefghijklmnoöpqrsßtuüvwxyz
Die Umlaute sind also richtig einsortiert. Auf meinen Entwicklungsrechner (Mac OS X, PHP 5.2. sieht das Ergebnis dagegen so aus:
Code:
Alt: C Neu: de_DE.UTF-8
abcdefghijklmnopqrstuvwxyzßäöü
Die Umlaute sind hinten angehangen und nicht richtig einsortiert.

Grundsätzlich wäre es ja nicht so das Problem, da es ja auf dem Webserver richtig läuft. Da ich aber verschiedene größere Datenmengen lokal konvertieren will, brauche ich eine Lösung für meinen Mac.

Hat irgendjemand eine Idee, warum strcoll hier auf dem Mac versagt?

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 18.05.2009, 20:38
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.025
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Zitat:
Zitat von netspy Beitrag anzeigen
Auf meinem Webserver (Linux, PHP 5.2.6) liefert mir das auch wie erwartet folgende Ausgabe:
Das wundert mich ehrlich gesagt, da die korrekte Locale für Linux-Systeme „de_DE.UTF-8“ wäre.

OSX kenne ich nicht wirklich, aber kann es eventuell sein, dass du die Schreibweisen genau vertauscht hast?
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 18.05.2009, 20:58
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.956
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Nein, dass mit der Locale passt schon. locale -a liefert mir unter Linux …
Code:
de_DE@euro
de_DE.iso88591
de_DE.iso885915@euro
de_DE.utf8
… und unter Mac OS X (also Darwin/BSD) …
Code:
de_DE
de_DE.ISO8859-1
de_DE.ISO8859-15
de_DE.UTF-8
de_DE.UTF-8 nimmt Linux entsprechend gar nicht an, genau wie unter Mac de_DE.UTF8 nicht geht.

Die Locale stimmt also und wird richtig gesetzt. Nur interessiert das strcoll unter Mac irgendwie nicht.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #4 (permalink)  
Alt 18.05.2009, 22:31
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.025
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Ein „locale | grep LC_COLLATE“ liefert mir hier:
Zitat:
LC_COLLATE="de_DE.UTF-8"
Die Ausgabe von „locale -a“ weicht hier komischer Weise ab, in sämtlichen Konfigurationsdateien findet sich die oben genannte Schreibweise.

Tut mir leid, eine andere Idee habe ich dazu auch nicht mehr.
Mit Zitat antworten
  #5 (permalink)  
Alt 18.05.2009, 23:01
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.956
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich hab es gerade noch mal probiert, unter Linux wird de_DE.UTF-8 und de_DE.UTF8 akzeptiert und strcoll liefert das richtige Ergebnis. Unter Mac liefert setlocale bei de_DE.UTF8 als Ergebnis FALSE zurück, kennt also diese Locale nicht. de_DE.UTF-8 wird dagegen richtig gesetzt, hat eben nur nicht den gewünschten Effekt und strcoll liefert ein falsches Ergebnis.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #6 (permalink)  
Alt 19.05.2009, 07:46
Benutzerbild von uspri
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 04.07.2005
Beiträge: 900
uspri sorgt für eine eindrucksvolle Atmosphäreuspri sorgt für eine eindrucksvolle Atmosphäre
Standard

Mal ne Frage am Rande: Schonmal in den Usercomments auf PHP: strcoll - Manual nachgeschaut? Da steht was in der Art Deines Problems drinnen, was evtl. helfen könnte. Ich habe aber keinen Plan von der Funktion, da ich das noch nie verwendet habe.
Mit Zitat antworten
  #7 (permalink)  
Alt 19.05.2009, 09:51
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.956
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Das ist eigentlich nicht mein Problem. Der Kommentar beschreibt ja genau das beabsichtigte Verhalten von strcoll.

strcmp und strcoll (mit der Locale "C") vergleichen Strings nur anhand ihres numerischen Werts. Da bei ASCII das große "A" der Wert 65 hat und das kleine "a" den Wert 97 hat, ist da "a" größer als "A".

Setzt man eine Locale wie "de_DE", ändert sich das Verhalten von strcoll und es vergleicht anhand der Besonderheiten der eingestellten Sprache. Da ist es nun mal so, dass ein kleines "a" auch kleiner als ein großes "A" ist und entsprechend ist das Ergebnis. Genauso will ich es, nur klappt das auf meinem Mac leider nicht.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
Antwort

Stichwörter
setlocale, strcoll, utf-8

Themen-Optionen
Ansicht

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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Schriftlaufweite im Mac micronix CSS 2 17.01.2011 17:16
Rendering Mac Safari Kirladu CSS 2 08.02.2010 14:34
Darstellungsänderungen zwischen Firefox Win und Firefox Mac JS-Gestaltung Barrierefreiheit 8 12.10.2009 08:28
ie 5.2 mac, hauptnavigation horizontal planet CSS 7 29.12.2007 12:06
Darstellungsprobleme mit IE (mac, win) und Opera gartlic Site- und Layoutcheck 3 23.06.2005 21:10


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