Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php, mysql, utf8] ograniczenie ilosci znakow
Forum PHP.pl > Forum > Przedszkole
PiXel2.0
W naglowkach HTML mam kodowanie utf8 oraz pliki PHP tez sa kodowane w utf8.
Gdy wprowadzam do formularza dane z polskimi znakami to strlen() traktuje polskie znaki jak dwa narmalne.
Problem ten rozwiazalem (chyba prawidlowo) dajac strlen(utf8_decode($_POST['string'])) i teraz liczy normalnie.

Jednak pozostal problem z baza MySQL bo np w pola VARCHAR(10) nie da sie wprowadzic 10 polskich znakow.

Jak sie postepuje w takich sytuacjach questionmark.gif

Czy do bazy tez wprowadzic dane zwrocone przez utf8_decode() czy mozna ustawic kodowanie bazy questionmark.gif
Jak z danymi pobranymi z MySQL questionmark.gif
nevt
jak ustawisz w MySQL kodowanie bazy / tabeli / pola na utf-8 to wejdzie tyle znaków, ile zadeklarujesz w definicji tabeli... czyli do VARCHAR(10) spokojnie wstawisz dziesięć literek z polskimi "ogonkami"
PiXel2.0
A mozesz mi podac kod SQL ktory przystosuje tabele do UTF-8 questionmark.gif

Jest jeszcze kwestia funkcji znakowych PHP...
Czy istnieje jakas funkcja PHP za pomoca ktorej mozna zadeklarowac, ze operujemy tylko na znakach UTF-8 questionmark.gif
Chodzi o to aby funkcje znakowe (takie jak np strlen(), substr() itp.itd.) dzialaly poprawne na lancuchach zakodowanych w UTF-8 bez ciaglego stosowania utf8_decode() i utf8_encode().
nevt
Cytat
A mozesz mi podac kod SQL ktory przystosuje tabele do UTF-8

nie mogę, nie znając struktury twojej bazy / tabel... polecam google i poszukanie phpMyAdmin lub MySQL Adminitrator - to są narzędzia które służą do zarządzania i administracją bazy...
Cytat
Czy istnieje jakas funkcja PHP za pomoca ktorej mozna zadeklarowac, ze operujemy tylko na znakach UTF-8

nie istnieje, ale istnieją specjalne funkcje do operowania na wielobajtowych znakach... wszystkie mają wspólny przedrostek mb_ (od multi bytes), np. zamiast strlen() stosujesz mb_strlen() - i wtedy możesz wywołać funkcję mb_internal_encoding() która ustawi domyślne kodowanie dla wszystkich funkcji z przedrostkiem mb_ ... polecam lekturę manuala...
potreb
Jeżeli w bazie twoje tabele mają metodę porównywania napisów np latin2_ci general, to wtedy będą się pokazywały np 2 znaki lub 3 dla polskich znaków. Wszystkie tabele dla utf8 musisz mieć w utf8_unicode_ci. Poprzez phpmyadmina możesz pozmieniać metodę porównywania napisów, jeżeli masz dużo tych tabel to będziesz musiał się trochę natrudzić.
adasko
Przy dużej ilości tabel zawsze można eksportować baze danych do pliku otworzyc w jakimś edytorze taki plik i następnie ustawić żeby zamienił "latin2_ci general" na "utf8_unicode_ci" i potem zaimportowac baze danych:) Na pewno w takiej sytuacji nie powinnie zadnej tabeli pominąć:)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.