Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Iteracja stringa w UTF8
Forum PHP.pl > Forum > PHP
rafaelb
Mam następujący problem. String w UTF8 i chcę go przejść po literce niestety z polskimi znakami mam krzaczki.
Przykład:
  1. <?php
  2. $str = 'zażółć gęślą jaźń';
  3. print '$str: '.$str.'<br />';
  4. for($i = 0; $i < strlen($str); $i++){
  5. print ' <span>'.$str{$i}.'</span>';
  6. }
  7. print '<br />$str: '.$str.'<br />';
  8. ?>

Wynik
  1. $str: zażółć gęślą jaźń
  2. z a g l j a
  3. $str: zażółć gęślą jaźń


Jakieś pomysły? Sugestie. Wiem że UFT8 zajmuje po da bity na każdą literkę ale nie wiem jak to zgrabnie przeliterować, bez użycia konwersji do ISO wcześniej
Blodo
utf8 nie zajmuje dwoch bajtow na kazda litere, tylko od jednego do czterech. W php5 nie da sie tego obejsc bez napisania wlasnej funkcji, ktora pojdzie literka po literce i walnie to wszystko do jakiejs tablicy ktora potem mozesz manipulowac. Nie jest to specjalnie trudne jak sie zna bitwise operators, ale tak czy inaczej wymaga troche czasu. Jak nie chcesz sam do tego dochodzic, to polecam phputf8.
rafaelb
Cytat(Blodo @ 19.11.2007, 13:06:52 ) *
utf8 nie zajmuje dwoch bajtow na kazda litere, tylko od jednego do czterech. W php5 nie da sie tego obejsc bez napisania wlasnej funkcji, ktora pojdzie literka po literce i walnie to wszystko do jakiejs tablicy ktora potem mozesz manipulowac. Nie jest to specjalnie trudne jak sie zna bitwise operators, ale tak czy inaczej wymaga troche czasu. Jak nie chcesz sam do tego dochodzic, to polecam phputf8.


Dzięki wielkie, fajna biblioteka.
W między czasie znalazłem polską produkcję:
Biblioteka do operacji na ciągach znaków w UTF-8
SirZooro
Można też wykorzystać funkcje udostępniane przez moduł iconv
NoiseMc
  1. <?php
  2.  
  3. header ('Content-Type:text/html; charset=utf-8');
  4.  
  5. $str = 'zażółć gęślą jaźń';
  6. print '$str: '.$str.'<br />';
  7. for($i = 0; $i < iconv_strlen($str, 'UTF-8'); $i++){
  8. print ' <span>'.iconv_substr($str, $i, 1, 'UTF-8').'</span>';
  9. }
  10. print '<br />$str: '.$str.'<br />';
  11. ?>
nevt
a nie prościej użyć standardowej biblioteki mbstring ? i funkcji mb_substr() ?
Blodo
Mbstring moze byc wlaczone na serwerze lub moze na nim wlaczone nie byc. Mialem do czynienia z serwerem ktory mial na PHP5 wylaczone iconv, no i oczywiscie wlaczenie iconv rowniez opcja nie bylo. Jezeli aplikacja ma dzialac na wielu serwerach, to trzeba sie troche pomeczyc samemu i przynajmniej zrobic handler ktory bedzie korzystal z iconv jezeli jest dostepne lub z phputf8 jezeli nie jest.
Oczywiscie jezeli ma sie pewnosc ze ta aplikacja bedzie uzywana tylko na jednym serwerze, i jest na nim iconv lub mbstring to sprawa wyglada inaczej..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.