1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

ucfirst() und UTF-8

Dieses Thema im Forum "PHP" wurde erstellt von Sasser, 9. Mai 2012.

  1. Sasser

    Sasser Erfahrenes Mitglied

    Guten Abend!

    Seitdem ich meine Webseite auf UTF-8 umgestellt habe, werden "äöü" mit ucfirst() nicht mehr großgeschrieben.

    Die Suche erbrachte nur, dass hier die Unterstützung fehlt. Wie kann man dennoch, eventuell mit anderen Funktionen solche Umlaute großschreiben? Oder gibt es irgendwelche Einstellungen, sodass dies auch mit UTF-8 funktioniert?
  2. einfach nur crack

    einfach nur crack mag Cookies & Kekse

    Das PHP-Handbuch gibt eigentlich schon ausreichende Informationen dazu:
  3. ComFreek

    ComFreek Mod | @comfreek Moderator

    Du könntest [phpf]mb_convert_case[/phpf] benutzen:
    Code (PHP):
    1.  
    2. $string = mb_convert_case($string, MB_CASE_UPPER, 'UTF-8');
    3.  
  4. Sasser

    Sasser Erfahrenes Mitglied

    D.h. ich müsste im Server etwas umstellen? Wie stelle ich denn die Voreinstellung um, es kann ja kein zusätzlicher Paramenter übergeben werden.
  5. einfach nur crack

    einfach nur crack mag Cookies & Kekse

    Schau dir mal setlocal() an.
  6. Sasser

    Sasser Erfahrenes Mitglied

    Ok ich werde mir das mal zu Gemüte führen.

    Nur mal zum Verständis und für später; Muss ich grundsätzlich bei der Nutzung von UTF-8 auch setlocal() nutzen oder ist das nur ein Behelf!?

    Seit der Umstellung auf UTF-8 hatte ich sehr viele Probleme und diese möchte ich bei nächsten Webseiten vermeiden.
  7. einfach nur crack

    einfach nur crack mag Cookies & Kekse

    Man kann so etwas auch viel schöner über die php.ini einstellen, aber auf die hat man meist keinen Zugriff. Ansonsten bietet sich das schon an, wenn man ganz sicher sein will.
  8. Sasser

    Sasser Erfahrenes Mitglied

    Ich habe die Einstellung nun vorgenommen und den Webserver neugestartet. Das Problem ist jedoch immer noch das Gleiche!?

    Code (Text):
    1.  
    2. ;intl.default_locale = de_DE
    3.  
    Zuletzt bearbeitet: 10. Mai 2012
  9. Sasser

    Sasser Erfahrenes Mitglied

    Ich habe es nun mit einer Testdatei versucht mit dem Inhalt:

    PHP:
    1.  
    2. <?php
    3. header('Content-Type: text/html; charset=utf-8');
    4. setlocale(LC_ALL, "de_DE");
    5. echo ucfirst ( "österreich" );
    6. ?>
    7.  
    Trotzdem wird der Umlaut am Anfang nicht groß geschrieben. Wenn ich den charset auf ISO umstelle, funktioniert es.
  10. einfach nur crack

    einfach nur crack mag Cookies & Kekse

    Da weiß ich auch gerade nicht weiter.
  11. Sasser

    Sasser Erfahrenes Mitglied

    Ich weiß auch nicht, warum ich unbedingt die Webseite auf UTF-8 umstellen musste. Mit ISO hat es doch wunderbar funktioniert und es gab überhaupt keine Probleme.

    Anstatt dass man mit UTF-8 alles vereinfacht ist es einfach nur wahnsinnig kompliziert geworden. Ich werde warscheinlich das ganze Projekt wieder auf ISO umstellen, da das UTF-8 keine Vorteil bringt. Der Sinn der Umstellung auf UTF-8 besteht anscheind nur darin, dass jemand festgelegt hat, das es modern ist.

    Ich bedanke mich trotzdem für die Hilfe und hoffe dass Webmaster die vorhaben Ihre Webseite umzustellen, lieber die Finger davon lassen :)
  12. einfach nur crack

    einfach nur crack mag Cookies & Kekse

    Ich kann nicht zustimmen, da ich alles in UTF-8 gestalte, weil es einfach einfacher ist. Und moderner.

    Nachtrag: Bei mir funktioniert ucfirst() bei Umlauten im Übrigen auch nicht mit UTF-8, aber eigentlich kann man so etwas doch leicht lösen:
    Code (PHP):
    1. function utf8_ucfirst ($string)
    2. {
    3.   return utf8_encode(ucfirst(utf8_decode($string)));
    4. }
    Zuletzt bearbeitet: 10. Mai 2012
  13. Sasser

    Sasser Erfahrenes Mitglied

    Ja aber ich sehe daran nichts, was einfach ist. Man muss soviele Funktionen selbst bauen, welche bei UTF-8 nicht funktionieren.

    Welche Funktionen funktionieren in UTF-8 denn auch nicht? Weil wenn dann muss ich gleich alle umstellen, um mir spätere Arbeiten zu ersparen :)
  14. einfach nur crack

    einfach nur crack mag Cookies & Kekse

    Vermutlich funktionieren all die Funktionen nicht, die unterscheiden müssen, ob ein Buchstabe ein Klein- oder ein Großbuchstabe ist. Also folgende:
    • ucfirst
    • strtolower
    • strtoupper
    • lcfirst
    • ucwords
    Ansonsten kannst du dir auch mal diese Funktionen hier ansehen: http://de.php.net/manual/en/ref.mbstring.php
  15. Sasser

    Sasser Erfahrenes Mitglied

    Oh man, dann funktionieren ja zusätzlich preg_match, strpos und weitere Funktionen auch nicht oder? So wie ich das sehe, muss ich ja die komplette Webseite neu schreiben. Wie machst du das denn, wenn du deine Webseite auch in UTF-8 erstellst?
  16. einfach nur crack

    einfach nur crack mag Cookies & Kekse

    Wie gesagt: es sollte nur die angegebenen Funktionen aus meiner Liste betreffen. strpos und preg_match ist definitiv UTF-8 sicher.
  17. Sasser

    Sasser Erfahrenes Mitglied

    Ok vielen Dank, dann werde ich mich morgen mal frisch daran machen.

    Ich danke dir für die kompetente Hilfe! :)
  18. Sasser

    Sasser Erfahrenes Mitglied

    Ich habe mir nun Funktionen gesucht, welche UTF-8 unterstützen.

    Jedoch wird bei der Funktion mb_ucfirst () trotzdem alles klein geschrieben und bei der zweiten Funktion werden anstatt des Umlautes ein Fragezeichen dargestellt. Die Datei selbst ist in UTF-8 ohne BOM gespeichert. Wo liegt der Fehler!?

    PHP:
    1.  
    2. header ( "content-type: text/html; charset=UTF-8" );
    3.  
    4. if (function_exists ( "mb_ucfirst" ) == false) {
    5.     function mb_ucfirst($text) {
    6.         return mb_strtoupper ( substr ( $text, "0", "1" ) ) . substr ( $text, "1" );
    7.     }
    8. }
    9.  
    10. echo mb_ucfirst ( "österreich" );
    11. echo "<br>";
    12. echo mb_strtolower ( "ÖSTERREICH" );
    13.  
  19. Sasser

    Sasser Erfahrenes Mitglied

    Das Problem lag am Encoding, folgendes funktioniert nun:

    PHP:
    1.  
    2. header ( "content-type: text/html; charset=UTF-8" );
    3.  
    4. if (function_exists ( "mb_ucfirst" ) == false) {
    5.     function mb_ucfirst($string, $encoding) {
    6.         return mb_strtoupper ( mb_substr ( $string, "0", "1", $encoding ), $encoding ) . mb_substr ( $string, "1", strlen ( $string ), $encoding );
    7.     }
    8. }
    9.  
    10. echo mb_ucfirst ( "österreich", "UTF-8" );
    11. echo "<br>";
    12. echo mb_strtolower ( "ÖSTERREICH", "UTF-8" );
    13.  
    Im übrigen funktioniert substr auch unter UTF-8 nicht!
    Zuletzt bearbeitet: 11. Mai 2012
  20. bofh1337

    bofh1337 Erfahrenes Mitglied


    LC_ALL zu setzen ist mehr als Fail, du hast damit auch die Dezimalzahlen von "x.xxx" auf "x,xxx" umgestellt, könnte beim DB-Insert zu lustigen Fehlern führen, wenn es nicht zusätzlich behandelt wird

Diese Seite empfehlen