![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 1.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Moje ustawienia to: - w pliku .php: content="text/html; charset=utf-8" - na serwerze mysql: -- metoda porównywania napisów: wszędzie utf8_general_ci. Dopisałem przed INSERT'em linijki z set character set utf8 i wydaje się, że działa. Problem pojawia się tylko przy wprowadzeniu wszystkich polskich znaków w ciągu, czyli: ęóąśłżźćń. strlen() pokazuje wówczas 18 znaków a jest 9. Dziwna sprawa, spotkał się ktoś z tym? Doszedłem do wniosku, że coś jest nie tak z literą "ń". Jeden znak "ń" jest widziany jako 2 znaki. Czyli "ńńń" w strlen() zwraca 6. A przy zastosowaniu go przy ciągu znaków "ęóąśłżźćń" powoduje iż system widzi ten ciąg jako 18 znaków. Przy ciągu "ąąąąń" wychodzi 10 znaków. Co dziwne, przy zastosowaniu ograniczenia:
przed INSERT'em do bazy i wprowadzeniu "ńńń" jako $ciag, fukcja if zwraca false i INSERT wchodzi bo system widzi "ńńń" jako 6 znaków... Przy pominięciu "ń" też coś jest nie tak bo ciąg znaków "ęóąśłżźć" odczytany jest przez strlen() jako 16 znaków. Ma ktoś jakiś pomysł co to może być? Ten post edytował spokz 18.12.2007, 19:42:28 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 295 Pomógł: 7 Dołączył: 26.03.2004 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
Ogonki w UTF'ie są kodowane 2bajtowo, zwykłe znaki 1 bajtowo. Nie wiem co ma do tego mysql, bo w sumie nic o bazach danych nie piszesz. Z drugiej strony ciekawy problem. Zazwyczaj walka toczy się o prawidłowe wyświetlanie polskich znaków na stronie, czasem o problemy z sortowaniem polskich znaków lub ich porównywaniem, ale długości nie mierzyłem :) . Jednak całkiem możliwe, że tekst w kodowaniu utf8 zwracany z mysql po rozłożeniu na poszczególne znaki może mieć większą długość niż by to wynikało z polskiego alfabetu.
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 1 Dołączył: 6.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
strlen zwraca bajty - do utf8 używaj mb_strlen (jeśli masz mbstringa) lub strlen(utf8_decode($zmienna)) jeśli mbstringa nie masz.
Jak chcesz mieć pewność, że zadziała wrzuć sobie Kod function mb_strlen($t, $encoding = 'UTF-8')
{ if (function_exists('mb_strlen')) { return mb_strlen($t, $encoding); } else { return strlen(utf8_decode($t)); } } |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 1.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc. strlen(utf8_decode($zmienna)) działa bardzo dobrze
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 11:12 |