Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kodowanie PHP -> MySQL
spokz
post 18.12.2007, 19:47:06
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:
  1. <?php
  2. if (strlen($ciag) < 6) { echo "ciąg znaków musi mieć minimum 6 znaków"; }
  3. ?>

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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
c2h5oh
post 19.12.2007, 01:51:13
Post #2





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));
        }
    }
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 07:46