Latet
traktujesz ciąg znaków jak kolejkę fifo
while (c=wezznak()) { if (ord(c)127) c.=wezznak(); czyznakpasuje(c); }
A jak się ma ord(c)127 do UTF-8?
utf-8 to znaki które zajmują jeden bajt jeżeli pokrywają się z ascii 0-127 i 2 bajty jeżeli najstarszy bit pierwszego jest ustawiony.
Lemat
poprawka: 2 najstarsze bity czyli w zasadzie >2 (128+64) zamiast >8 w praktyce wychodzi na jedno. W teorii jest też więcej bajtów - ale znowu w praktyce można je pominąć upraszczając sobie sprawę.
Jak zidentyfikować alfabet w tekscie UTF-8?
utf-8 to znaki które zajmują jeden bajt jeżeli pokrywają się z ascii 0-127 i 2 bajty jeżeli najstarszy bit pierwszego jest ustawiony.
poprawka: 2 najstarsze bity czyli w zasadzie 2 (128+64) zamiast 8 w praktyce wychodzi na jedno. W teorii jest też więcej bajtów - ale znowu w praktyce można je pominąć upraszczając sobie sprawę.
In the darkest hour on Fri, 08 Feb +, Lemat screamed:
Wystarczy napisać odpowiedni regexp dla wszystkich przypadków, po co tracić czas na pisanie protez.
a) 0xxxxxxx b) xxxx 10xxxxxx 10xxxxxx c) 0xxx 10xxxxxx 10xxxxxx 10xxxxxx d) 10xx 10xxxxxx 10xxxxxx 10xxxxxx e) 10xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx f) 110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
a) 0xxxxxxx b) xxxx 10xxxxxx 10xxxxxx c) 0xxx 10xxxxxx 10xxxxxx 10xxxxxx d) 10xx 10xxxxxx 10xxxxxx 10xxxxxx e) 10xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx f) 110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Czy d) to nie pomyłka?
latet
<?PHP header('Content-Type: text/plain; charset=utf-8');
$txt='ĄŻŹŚĆÓŁŃążźśćółń'; for ($i=0; $i<16; $i++) { echo $txt[2*$i].$txt[2*$i+1].' '.ord($txt[2*$i]).' '.ord($txt[2*$i+1])."\n"; } ?
Efekt:
Ą 196 132 Ż 197 187 Ź 197 185 Ś 197 154 Ć 196 134 Ó 195 147 Ł 197 129 Ń 197 131 ą 196 133 ż 197 188 ź 197 186 ś 197 155 ć 196 135 ó 195 179 ł 197 130 ń 197 132
Pozdrawiam,
latet