Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/home/mt3o/domains/blog.mt3o.it/public_html/wp-content/plugins/revslider/includes/operations.class.php on line 2323 Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/home/mt3o/domains/blog.mt3o.it/public_html/wp-content/plugins/revslider/includes/operations.class.php on line 2327 Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/home/mt3o/domains/blog.mt3o.it/public_html/wp-content/plugins/revslider/includes/output.class.php on line 3165 Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/home/mt3o/domains/blog.mt3o.it/public_html/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 77 Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/home/mt3o/domains/blog.mt3o.it/public_html/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 87 Rozsypały się literki z unikodu, a kotek jeszcze by chciał - Another blog in the net

Rozsypały się literki z unikodu, a kotek jeszcze by chciał

Rozsypały się literki z unikodu, a kotek jeszcze by chciał

W interneciku na serwerku,
Stała stronka i contencik.
Przyszedł substr, ciachnął tekścik,
A ogonkiem spsuł unikodzik..

W projekcie, nagle, w nieprzewidzianym miejscu rozsypał się UTF-8. Na jednej podstronie, choć pozostałe generowane z tego samego szablonu – były ok. Żeby było śmieszniej, rozwalony kod był od połowy strony, wcześniejsze krzaki w źródle były ok. Dopiero po pewnym fragmencie – były źle. W połowie strony zepsuło się UTF-8 i wyświetlały się krzaki. Ciekawostka…

Winnym okazał się substr w php. To bezhołowie nawet nie podejrzewa, że istnieje coś takiego jak unikod, proszę państwa!

Zdarzyło się tak, że substr uciął treść, zgodnie z założeniem, po 1024 znakach. Pech trafił, że substr liczył znaki zgodnie z ASCII czyli jednobajtowo, a w UTF-8 znaki spoza zakresu zajmują więcej niż jeden bajt. Eksperymentalnie sprawdziłem, że to substr jest odpowiedzialny za rozkład i zgniliznę w reszcie strony.

Zapamiętać: na unikodzie robimy mb_substr( $string, $start, $end, ‚utf-8’)