Cybaer: utf-8 detection

Beitrag lesen

Hi,

Die regular expression hat den Nachteil, dass sie so keine qualifizierte Aussage gibt, welche utf-8 Stufe erreicht wurde. Wäre schöner, wenn man das auch wüsste.

  
/* Ist String korrektes UTF-8? */  
function valid_utf8($string) {  
 $result=1;  
 $len=strlen($string);  
 $i=0;  
 while($i<$len) {  
  $char=ord($string{$i++});  
  if(valid_1byte($char)) { // continue  
   continue;  
  } elseif(valid_2byte($char)) { // check 1 byte  
   if(!valid_nextbyte(ord($string{$i++}))) return FALSE;  
   $result=max($result,2);  
  } elseif(valid_3byte($char)) { // check 2 bytes  
   $result=max($result,3);  
   if(!valid_nextbyte(ord($string{$i++}))) return FALSE;  
   if(!valid_nextbyte(ord($string{$i++}))) return FALSE;  
  } elseif(valid_4byte($char)) { // check 3 bytes  
   $result=max($result,4);  
   if(!valid_nextbyte(ord($string{$i++}))) return FALSE;  
   if(!valid_nextbyte(ord($string{$i++}))) return FALSE;  
   if(!valid_nextbyte(ord($string{$i++}))) return FALSE;  
  } else {  
   return FALSE; // 10xxxxxx occuring alone  
  } // goto next char  
 }  
 return $result; // done  
}  
  
function valid_1byte($char) {  
 if(!is_int($char)) return FALSE;  
 return ($char & 0x80)==0x00;  
}  
  
function valid_2byte($char) {  
 if(!is_int($char)) return FALSE;  
 return ($char & 0xE0)==0xC0;  
}  
function valid_3byte($char) {  
 if(!is_int($char)) return FALSE;  
 return ($char & 0xF0)==0xE0;  
}  
function valid_4byte($char) {  
 if(!is_int($char)) return FALSE;  
 return ($char & 0xF8)==0xF0;  
}  
function valid_nextbyte($char) {  
 if(!is_int($char)) return FALSE;  
 return ($char & 0xC0)==0x80;  
}  
  

valid_utf8("Text") liefert 1, 2, 3, 4 oder FALSE zurück.

Gruß, Cybaer

--
Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
0 45

utf-8 detection

Dieter Raber
  • php
  1. 0
    Siechfred
    1. 0
      Tom
      1. 0
        Siechfred
        • menschelei
      2. 0
        Cybaer
        1. 0

          Gibt es eine utf-8 String-Klasse?

          Tom
          1. 0
            dedlfix
            1. 0
              Tom
              1. 0
                dedlfix
                1. 0
                  Tom
                  1. 0
                    Sven Rautenberg
                    1. 0
                      Tom
                  2. 0
                    dedlfix
                    1. 0
                      Tom
                      1. 0
                        dedlfix
                        1. 0
                          Tom
                          1. 0
                            Sven Rautenberg
                            1. 0
                              Tom
            2. 0
              Cybaer
              • meinung
              1. 0
                dedlfix
                1. 0

                  NORMIERUNG: Sackgasse oder Lösungsansatz?

                  Tom
                  • sonstiges
                  1. 0
                    dedlfix
                  2. 1
                    Sven Rautenberg
                    1. 0
                      Cybaer
                    2. 0

                      Wollte nicht kneifen, aber 1&1 hat "Späße" gemacht

                      Tom
                      1. 0
                        Sven Rautenberg
            3. 0
              Cybaer
              • meinung
          2. 0
            Cybaer
      3. 0
        Sven Rautenberg
        1. 0

          utf-8 Byteanzahl und Wahl des Zeichensatzes

          Tom
          1. 0
            Sven Rautenberg
            1. 0
              Tom
              1. 0
                Sven Rautenberg
                1. 0

                  Übersetzung Code -> Glyphe

                  Tom
                  1. 0
                    Sven Rautenberg
                  2. 0
                    Cybaer
                    1. 0
                      dedlfix
                      1. 0
                        Cybaer
                        • menschelei
  2. 0
    Christian Seiler
    1. 0
      Dieter Raber
  3. 0
    Tom
    1. 0
      dedlfix
  4. 0

    utf-8 detection, danke und Zusatzfrage

    Dieter Raber
    1. 0
      Tom
      1. 0
        Dieter Raber