Potrzebowałem na stronę skracacza tekstu - tzn. z wersji wejściowej np. 200 znaków, wycina pierwsze 50 wg. różnych zależności, ale mniejsza o to. Posłużyłem się funkcją substr i dzisiaj zauważyłem na stronie krzaczki (a dokładnie jeden). Cała treść na stronie jest kodowana w UTF-8, czyli każdy polski znak jest kodowany przy użyciu 2 bajtów (inne znaki po 1 bajcie).
Krzak był wynikiem skracania. Przykładowo:
$var = 'żaba'; for($i=0; $i<strlen($var); $i++) { }
żaba w UTF-8 ma długość (strlen) 5, a nie 4. Powyższy kod spowoduje, że dwa pierwsze znaki, odpowiadające kodowaniu litery "ż" będą krzakami. Tak substr trafiała mi "w środek" polskiego znaku i stąd krzak...
Tak więc mam istotę problemu, ale teraz jak sobie z tym radzić? Chciałbym zliczać polskie znaki jako 1 znak i przede wszystkim chciałbym pozbyć się ryzyka, że substr trafi mi "w środek" jakiegoś 2 bajtowego znaku. Doradźcie coś
