Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Iteracja stringa w UTF8
rafaelb
post 19.11.2007, 10:34:23
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 2
Dołączył: 17.01.2004

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Blodo
post 19.11.2007, 11:06:52
Post #2





Grupa: Zarejestrowani
Postów: 51
Pomógł: 1
Dołączył: 1.02.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
rafaelb
post 19.11.2007, 11:36:50
Post #3





Grupa: Zarejestrowani
Postów: 49
Pomógł: 2
Dołączył: 17.01.2004

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
SirZooro
post 20.11.2007, 22:08:33
Post #4





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

Ostrzeżenie: (0%)
-----


Można też wykorzystać funkcje udostępniane przez moduł iconv


--------------------
Go to the top of the page
+Quote Post
NoiseMc
post 20.11.2007, 22:26:00
Post #5





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


  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. ?>


--------------------
Go to the top of the page
+Quote Post
nevt
post 21.11.2007, 00:07:07
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


a nie prościej użyć standardowej biblioteki mbstring ? i funkcji mb_substr() ?


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
Blodo
post 21.11.2007, 03:31:06
Post #7





Grupa: Zarejestrowani
Postów: 51
Pomógł: 1
Dołączył: 1.02.2005

Ostrzeżenie: (0%)
-----


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..
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 00:47