Na klasycznym forum PHPBB które użytkuję pojawił się problem, którego nawet nie potrafię dobrze zdefiniować, więc z góry przepraszam jeśli jest źle opisany lub umieszczony lub się powtarza.
Użytkownik wysyłał wiadomość prywatną do innego użytkownika i przy wysyłaniu otrzymywał komunikat o błędzie serwera - wywalało całą stronę
SQL ERROR [ mysql4 ]
Incorrect string value: 'ðpr...' for column 'message_text' at row 1 [1366]
Wystąpił błąd bazy danych podczas pobierania tej strony. Jeśli problem będzie się powtarzał, skontaktuj się z administratorem.
Okazało się że stronę przeglądał na telefonie i wprowadzał do wiadomości emotki generowane przez telefon.
W rezultacie we frazie "ðpr..." między znakami "ð" oraz "p" były jeszcze trzy niewidoczne znaki, wyświetlane dopiero przy ręcznym przeniesieniu frazy do enkodera UTF, Znaki te miały postać domyślnych prostokącików.
ð∟∟∟pr...
\xC3\xB0\xC2\x9F\xC2\x98\xC2\x89\x70\x72\x2E\x2E\x2E
Jak widać pierwszy znak i trzy niewidoczne mają podwójny kod. (nawet nie mogę ich wkleić tutaj bo przy podglądzie znikają, dlatego są symulowane przez znak ∟)
Ja nawet nie bardzo rozumiem na czym polega ten problem, a co dopiero wymyślić jak się przed nim zabezpieczyć
EDIT: zaznaczam że tabela i kolumna mają metodę porównywania znaków utf8_polish_ci