Erster Buchstabe Uppercase bei specialchars

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Erster Buchstabe Uppercase bei specialchars

    Hi Leute,

    Ich arbeite an einer Registrierung und diese ist so gut wie abgeschlossen, da fällt mir ein, dass ich ja möchte, dass der erste Buchstabe des Vor- sowie Nachnamen ja groß geschrieben sein soll. An sich ja kein Problem mit ucfirst. Nun aber das Problem. Was ist wenn der Benutzer Beispiels Özil Özen heißt? Wie kann ich solche Chars abfangen und seperat zu nem Uppercase machen?

    Ich hab schon einiges ausprobiert und es auch hinbekommen mit nem normalen string.

    Sieht dann ungefähr so aus:

    PHP-Code:
    $firstname "özil";

    $d1 = array("ä" "ö""ü");
    $d2 = array("Ä" "Ö""Ü");
    $firstname[0] = str_replace($d1$d2$firstname);

    print
    ''.$firstname.'' 
    Nun kommt aber das noch viel größere Problem.
    Meine Daten sind in nem Formular, werden dann Via Post gesendet an meine verify.php .

    Dort dann erst einmal mit $_POST("var") in variablen gespeichert und weiter verarbeitet.

    Problem ist nun, dass keine ä,ö,ü's ankommen, sondern beispielsweise ein %20%20zil anstelle von özil (habe mir jetzt den code nicht genau gemerkt).

    Wie kann ich dass denn dort machen?

    Cheers

  • #2
    PHP-Code:
    function mb_ucfirst($str$encoding) {
        return 
    mb_strtoupper(mb_substr($str01$encoding), $encoding)
             . 
    mb_substr($str1mb_strlen($str$encoding) - 1$encoding);

    PHP-Code:
    echo mb_ucfirst('özdemir''UTF-8');
    // Özdemir 

    Kommentar


    • #3
      Problem ist nun, dass keine ä,ö,ü's ankommen, sondern beispielsweise ein %20%20zil
      Das glaube ich nicht. Und falls doch, dann machst du etwas falsch!

      Kommentar


      • #4
        Zitat von typhoch2 Beitrag anzeigen
        Hi Leute,

        Ich arbeite an einer Registrierung und diese ist so gut wie abgeschlossen, da fällt mir ein, dass ich ja möchte, dass der erste Buchstabe des Vor- sowie Nachnamen ja groß geschrieben sein soll. An sich ja kein Problem mit ucfirst. Nun aber das Problem. Was ist wenn der Benutzer Beispiels Özil Özen heißt? Wie kann ich solche Chars abfangen und seperat zu nem Uppercase machen?
        Du musst herausfinden, was der erste Buchstabe eines Wortes ist. Für UTF-8 könnte das so gehen:

        PHP-Code:
        function _uc_helper(
            
        $hits
        ) {
            return 
        mb_strtoupper($hits[0], 'UTF-8');
        }


        preg_replace_callback('/(?<=\p{L})\p{l}(?=\p{l}*)/u''_uc_helper'$name); 
        Allerdings halte ich die sture Großschreibung von Wortanfängen für keine gute Idee. Es gibt Namen, deren Bestandteile klein geschrieben werden -- wie bspw. Adelstitel. Lass den Leuten doch einfach ihre Namen und deren Schreibweise.

        Problem ist nun, dass keine ä,ö,ü's ankommen, sondern beispielsweise ein %20%20zil anstelle von özil (habe mir jetzt den code nicht genau gemerkt).
        Das ist die URL-enkodierte Form von UTF-8, wenn ich jetzt mal annehme, dass dein %XX%XX in Wirklichkeit deutsche Umlaute kodiert. %20 wäre ein Leerzeichen. URL-kodierten Text wandelt man mit urldecode() in normalen Text zurück. Womit auch sonst ...
        Zuletzt geändert von fireweasel; 13.11.2010, 23:13.
        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

        Kommentar


        • #5
          hey danke für die Antworten Ich habe es nun wie folgt hinbekommen:

          PHP-Code:
          function ucfirst_utf8($str) {
                  if (
          mb_check_encoding($str,'UTF-8')) {
                      
          $first mb_substr(
                          
          mb_strtoupper($str"utf-8"),0,1,'utf-8'
                      
          );
                      return 
          $first.mb_substr(
                          
          mb_strtolower($str,"utf-8"),1,mb_strlen($str),'utf-8'
                      
          );
                  } else {
                      return 
          $str;
                  }
              }    
                  
                  
              
          $firstname htmlspecialchars(ucfirst_utf8($firstname)); 

          Kommentar


          • #6
            Es ist ja nett, dass du dich bedankst und auch, dass du uns mitteilst, das du das Problem gelöst hast, aber ...

            Zitat von typhoch2 Beitrag anzeigen
            hey danke für die Antworten Ich habe es nun wie folgt hinbekommen:

            PHP-Code:
            function ucfirst_utf8($str) {
                    if (
            mb_check_encoding($str,'UTF-8')) {
                        
            $first mb_substr(
                            
            mb_strtoupper($str"utf-8"),0,1,'utf-8'
                        
            );
                        return 
            $first.mb_substr(
                            
            mb_strtolower($str,"utf-8"),1,mb_strlen($str),'utf-8'
                        
            );
                    } else {
                        return 
            $str;
                    }
                }    
                    
                    
                
            $firstname htmlspecialchars(ucfirst_utf8($firstname)); 
            ... wieso hast du h3lls funktionierenden Vorschlag bis zur Unkenntlichkeit verbogen anstatt ihn zu übernehmen? Wieso baust du eine UTF-8-Erkennung ein um anschließend Nicht-UTF-8-kodierte Strings einfach unmodifiziert durchzulassen? Wie erkennt dein Script, ob der erste Buchstabe in $firstname auch ein Buchstabe ist?

            Auch ist mb_check_encoding() nicht zu 100 Prozent vertrauenswürdig, was UTF-8-Kodierung angeht. Das Erkennen von UTF-8 ist sowieso schwierig, wenn nicht gerade eine BOM vorangestellt ist.
            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar

            Lädt...
            X