![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 3.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
1. Mam formularz do którego dodaję tekst. Jest on nastepnie obrabiany i każdy wyraz z tego ciągu dłuższy od 3 znaków jest wsadzany do bazy danych. Cały skrypt, mysql i html używają systemu UTF-8. Niestety mimo tego do bazy danych wpadają krzaki. Oczywiście gdy wyciągne te rekordy z bazy danych to przeglądarka wyswietli mi je normalnie. Jednak jeśli do MySQL dodam jakiś rekord ręcznie to normalnie rekordy są przetrzymywane z żąśółćńę itp. Jak zrobić żeby przez sam skrypt tak się dodawało automatycznie?? Tekst jest poddawany obróbce przez nastepujące funkcje w niezmienionej postaci:
Która z tych funkcji coś zawala?? i na co wymienić zeby nie było krzaków w MySQL 2. Drugi problem dotyczy tego że z do innego formularza jestem przekierowywany z jakiegoś tam linku. W linku tym jest zawarta zmienna (a więc tablica GET). Zmienna zawiera jedną literę alfabetu. Nie ma żadnego problemu jesli nie będzie to litera z ogonkiem. Jak zczytać z tej zmiennej GET tą litere żeby normalnie mi ją przekonwertowało do UTF-8 i nie powstały żadne krzaki?? Aktualnie używam funkcji html_entity_decode()" title="Zobacz w manualu PHP" target="_manual |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 219 Pomógł: 10 Dołączył: 9.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Napisz trochę jaśniej. Krzaczki masz przy ręcznym dodawaniu rekordu do bazy przez np. phpMyAdmina czy przy dodawaniu przez skrypt?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 3.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Krzaczki występują prze dodawaniu poprzez skrypt którego wszystkie funkcje zamieściłem
![]() Przy dodawaniu RĘCZNYM przez phpMyadmina krzaczki NIE WYSTĘPUJĄ. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 219 Pomógł: 10 Dołączył: 9.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jak dla mnie to musisz się jedynie upewnić, że strona, z której jest wysyłany formularz, też używa kodowania utf-8. Wtedy obrabianie znaków w php będzie niepotrzebne.
|
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 3.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Napisałem wyraźnie że strona również ma kodowanie utf-8
A tekst musi być obrabiany ponieważ jest to długi ciąg znaków z który musi być rozdzielony na poszczególne słowa i dodane do bazy danych która tworzy jakby słownik. Coś jest na 100% nie tak ze skryptem bo wszystkie litery z ogonkami w bazie danych mam zapisane za pomocą 2 jakiś dziwnych znaczków... EDIT: Zauważyłem teraz że jeśli dodam cały tekst bezpośrednio (beż żadnej obróbki do bazy danych) wprost z tablicy POST przez prosty skrypcik php to też występują krzaczki... Czy zmienną POST trzeba jakoś przekonwertować?? Ten post edytował coder() 9.01.2008, 19:37:04 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 5.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
A sprawdź jakie kodowanie jest ustawione w tabeli...
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 3.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
no całą bazę jak robiłem to zaznaczyłem pl-utf-8
jak sprawdzić w pojedynczej tabeli??:| |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 12 Dołączył: 6.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Miałem kiedyś taki sam problem. Okazuje się, że meritum sprawy nie tkwi ani w kodowaniu bazy, ani tabeli, ani formularza (oczywiście pod warunkiem, że są dobrze ustawione). Istnieją jeszcze inne istotne kodowania, które mogą wpływać na znaki w połączeniu pomiędzy php i mysql. Jakie kodowania użyto można sprawdzić za pomocą:
Z kolei ustawić je można zaraz po nawiązaniu połączenia i wybraniu bazy w następujący sposób:
Ten post edytował Cotter 9.01.2008, 20:59:45 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 568 Pomógł: 192 Dołączył: 7.03.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Rozumie, że pliki masz zapisane w utf-8. Jak tak przy połączeniu z bazą możesz ustawić sobie SET NAME utf-8
-------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 3.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
za każdym razem mi wyskakuje błąd gdy chce cokolwiek zmienić w kodowaniu bazy itp.
Cytat MySQL zwrócił komunikat:
#1064 - Something is wrong in your syntax obok 'character_set_client='utf8'' w linii 1 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 12 Dołączył: 6.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Na początku zobacz jakie zmienne zwróci kwerenda:
wszędzie powinno być utf8. Jeżeli gdzieś nie ma to ustaw:
Starsze wersje mysql mogą nie obsługiwać podanych przeze mnie zmiennych. Możesz również spróbować napisanej przez potreb'a podpowiedzi. Często rozwiązuje to problem. Z tym, że powinno być:
Ten post edytował Cotter 9.01.2008, 21:00:01 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 3.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
właśnie w tym jest problem ze nawet te zmienne które mam pewność ze są (w tym przypadku sprawdziłem i mam character_set) nie da się zedytować...
Zawsze dostaje komunikat o błędzie 1064 ;/ przy SET NAMES jest to samo. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 12 Dołączył: 6.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
A sprawdzałeś czy są inne niż utf8? Ostatecznością jest konwertowanie zmiennych na inne kodowanie (na przykład ISO) przed wstawieniem ich do bazy używając funkcji iconv.
Jednak najpierw proponuję ci kontakt z administratorem serwera w tej sprawie. Ten post edytował Cotter 9.01.2008, 23:13:24 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 3.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Odświerzam temat ponieważ zainstalowałem sobie na własnym komputerze Apache 2.2 + Mysql 5 + php5 Teraz mam wieksze pole do popisu przy ustawianiu kodowania. i tak: tworze prosty skrypt w PHP zawierający zapytanie do bazy danych które mi doda polskie znaki do jakiejś tam tabeli. Oto ustawienia dla poszczególnych elementów: Baza Danych: utf8_polish_ci Tabela: utf8_polish_ci Wiersz: utf8_polish_ci System porównań dla połączenia MySQL: utf8_general_ci System kodowania znaków dla MySQL: UTF-8 Unicode (utf8) I dla zmiennych:
W php i html mam ustawione również utf-8 Krzaki powstają mimo wszystko Jak widać zmienne character_set_database oraz[/b] character_set_server [/b] mają kodowanie latin ale niestety mimo iż wykonuje zapytania i zapytanie wykona się poprawnie to i tak zmienne te nie zostają zmienione. Czy to jest powodem powstawania krzaczków?? Dodam ze w phpmyadmin gdy dodaję rekordy ręcznie jest wszystko w porządku. Tylko w przypadku gdy wysyłam zapytanie z pliku php występuje ten problem. Ten post edytował coder() 12.01.2008, 14:19:45 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 12 Dołączył: 6.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
A ustalasz te kodowania we wszystkich elementach za kazdym razem gdy laczysz sie z baza?
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 3.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie. Łacze się z bazą i od razu wysyłam zapytanie. A to mam coś jeszcze ustawiać za każdym razem przy połaczeniu przez skrypt php??
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 12 Dołączył: 6.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ustawiaj wszystkie kodowania dotyczące systemu i połączenia (kodowania dotyczące tabel są ustawiane raz i nie trzeba tego robić ponownie) zaraz po nawiązaniu połączenia. Następnie dopiero przesyłaj zapytania właściwe.
Czyli tak: Kod //Pseudokod mysql_connect(...); mysql_select_db(...); mysql_query("SET character_set_*='utf8'"); //teraz dopiero kwerenda mysql_query("INSERT INTO tabela (kolumna) values('ąężźć')"); mysql_cose(); Trzeba je ustawiać za każdym razem, ponieważ to jakie wartości są przyjmowane zależy od domyślnych ustawień serwera i systemu. Za każdym razem gdy się łączysz ponownie serwer nie wie, że potrzebujesz inne kodowania i przyjmuje te domyślne. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 20:56 |