Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Dziwne problemy z kodowaniem między stroną a bazą danych
sebap123
post
Post #1





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Mam dosyć dziwny problem z kodowaniem między stroną, a bazą danych MySQL. W bazie mam zapisane dwa rekordy: nazwa i skrót. Nazwa jest podawana przez użytkownika, a skrót jest generowany automatycznie przez skrypt (pobiera on pierwsze trzy znaki i sprawdza, czy taki skrót istnieje - jeśli tak to dopisuje cyfrę).
Wszystko odbywa się przy pomocy zwykłego formularza. Po wysłaniu i wygenerowaniu skutu pojawia się potwierdzenie zawierające nazwę i wygenerowany skrót. Potem jest to zapisywane do bazy i wyświetlana jest lista zwierająca nazwę i odpowiadający jej skrót.

I tutaj pojawia się mój problem. Nazwa zawsze, jest poprawnie wyświetlana (zawiera polskie znaki), a skrót nie - zawsze ma znak zapytania w rombie zamiast polskich znaków. Sprawdzałem w bazie, i tam zarówno nazwa jak i skrót wpisują się z krzaczkami zamiast polskich liter, ale wszelkie sprawdzenia, porównania itp. dokonywane na bazie zawsze są poprawne. Jak już mówiłem, wyświetlanie nazwy na stronie jest zawsze poprawne - zawsze znaczy i w momencie wyświetlenia potwierdzenia jak i listy, dlatego to co się dzieje w bazie średnio mnie niepokoi bo wynik nazwy mam poprawny.

Parę info dot. mojej strony i środowiska programistycznego, może to kogoś na coś naprowadzi:
- używam systemu szablonów smarty ze zdefiniowanym kodowaniem utf-8
- na wszystkich stronach html jest zdefiniowany meta-tag kodowania utf-8
- pliki tpl są tworzone w notepad++ z kodowaniem utf-8
- piszę w NetBeans, który ma odgórne kodowanie plików utf-8

Tak więc już nie wiem co jest nie tak, z tym skrótem, a przyznaje, że jest to rzecz, która mnie już bardzo irytuje. Może ktoś ma jakiś pomysł, jak ten problem rozwiązać? Jeśli coś jeszcze mam sprawdzić to napiszcie.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Używaj wciąż funkcji mb_ to będziesz wiedział, bo istnieje także mb_strlen, która zlicza dobrze wyrazy z polskimi znakami, a do cięcia jest mb_substr teraz jedynie file_exist i jazda w stylu
  1. if( mb_strlen( $nazwa_pliku ) > 2 ) { //sprawdzamy czy nazwa pliku ma 3 lub więcej znaków
  2. $skrot = mb_substr( $nazwa_pliku, 0, 3 ); //wycinamy 3 pierwsze
  3. if( !file_exists( $skrot ) ) { //sprawdzamy czy istnieje
  4. for($i = 1; :$i++) { //jesli nie to nieskończona pętla zwiększająca licznik o 1 co przebieg by tworzyć SKR.1, SKR.2, SKR.3
  5. if( !file_exists( $skrot.'.'$i ) ) { //sprawdzamy czy testowany skrót istnieje
  6. $skrot = $skrot.'.'$i; //jeśli nie to wpisujemy go jako znaleziony...
  7. break; //... i wychodzimy z nieskończonej pętli
  8. }
  9. }
  10. }
  11. } else {
  12. //przewidziałeś, że nazwa pliku będzie krótsza niż 3 znaki? :)
  13. }
oczywiście dopasować to musisz sam do swojego skryptu, ja tylkoCi w komentaarzach do kolejnych instrukcji napisałem na co zwrócić uwagę. z pętlą for( $i=1; ;$i++) musisz uważać. Dawno tego nie używałem i powinno działać w nieskończoność aż do instrukcji break, ale nie jestem pewien czy php przyjmował ten zapis z pominięciem czy w końcu sobie odpuścili (IMG:style_emoticons/default/smile.gif) Jeśli sypnie Ci tam błędem to daj dowolny warunek zawsze prawdziwy w miejsce pustki, czyli przykładowo for( $i=1; true; $i++)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 15.10.2025 - 02:03