![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 15.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
mam problem z porównywaniem znaków w skrypcie konkursowym. Działa to na zasadzie czatu AJAXowego, użytkownik musi trafić w jedną z trzech odpowiedzi. Niestety, okazuje się, że jeżeli odpowiedź prawidłowa zawiera polskie znaki a użytkownika nie, to i tak się zgadzają. Przykładowo SELECT 'pozar' = 'pożar' się zgadza. Nie wiem jak temu zapobiec. Niżej kod, który to u mnie sprawdza (przed sprawdzeniem odpowiedzi konwertuję wszystkie litery na małe):
Kodowanie bazy to utf8_general_ci, przy połączeniu wykonuję SET NAMES UTF8. Wszystkie pliki są zakodowane w UTF8 bez BOM. Ktoś miał podobny problem albo umie pomóc? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Kodowanie znaków masz UTF-8, nie utf8_general_ci. To ostatnie to system/tryb porównywania znaków i to właśnie to jest odpowiedzialne za to, że "z" = "ż". Google: MySQL Collations
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 15.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za szybką odpowiedź
![]() Znalazłem gdzieś na pierwszej stronie wątek ze stackoverflow: http://stackoverflow.com/questions/367711/...-mysql-with-php Sprawdziłem (dla odpowiedzi Alphonse Gabriel Capone, Al Caponeż, Al Capone - czyli Al Caponez/Al Caponeż) sobie kilka polecanych tam kombinacji i żadna nie działa prawidłowo. utf8_polish_ci i utf8_bin nie akceptuje żadnej wersji, a utf8_unicode_ci akceptuje obydwie. Czy jest możliwe, że jakoś zmienia się kodowanie wysyłanego tekstu i to psuje te znaki? Formularz wysyłam jako application/x-www-form-urlencoded;charset=utf-8, także nie powinno być problemów. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ah, dla MySQL nie ma wbudowanego trybu porównywania znaków uwzględniającego znaki diakrytyczne i ignorującego wielkość znaków. W takim razie przechowuj wyrazy zapisane małymi literami (mb_strtolower) w dowolnej formie znormalizowanej. Następnie przed wykonaniem porównywania wykonaj ten sam zabieg na zmiennej otrzymanej od użytkownika po czym wykonaj ostateczne porównanie przy użyciu trybu utf8_bin czy nawet binary.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 15.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Z tego co się orientuję, intl jest dosyć nowy i nie jestem pewien czy serwer, na którym stoi strona poprawnie to obsłuży. Nie ma innych rozwiązań?
@edit: Skojarzyła mi się jedna opcja. Gdzieśtam widziałem, że SELECT BINARY 'z'='ż' daje prawdę na wyjściu. Nie da się tego skombinować jakoś w ten sposób? Ten post edytował Kikert 24.08.2012, 15:37:43 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.07.2025 - 02:13 |