Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kłopot z przesyłem znaków od bazy sql do php
Forum PHP.pl > Forum > PHP
blackstone

Stworzyłem sobie pewną stronę internetową ( na razie jest na moim kompie, obsługiwana przez Webserv) której część treści przechowywana jest w bazie danych. Mój problem polega na tym że zarówno w tej bazie w php my admin jak i na samej stronie polskie znaki zwyczajnie nie występują.

Dokładnie rzecz ujmując

W pliku który obserwuje problem mam tak ustawione kodowanie
  1. [..] <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >[...]


a w bazie danych ( dokładnie mówiąc w konkretnej tabeli, nie wiem czy coś gdzieś indziej mogę zmienić ) wszędzie tam gdzie jest wiersz przechowujący tekst
ustawiłem kodowanie "utf8_polish_ci" i nie daje to żadnego rezultatu. Tam gdzie są polskie znaki jest znak zapytania albo "kwadracik a na dodatek ( tego to już zupełnie nie rozumiem) tytuł strony który też ma polskie znaki równierz nie jest czytany przez przeglądarkę. Wcześniej miałem ustawiony przez mój edytor tekstu do tworzenia stron:

  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">


Dodam tylko iż gdy w phpmyadmin przeglądam te treści to są one zapisane normalnie z polskimi znakami.
Nie wiem o co chodzi. Co mogę zrobić innego by naprawić tą sytuacje?
Słabo się orientuje w tym, proszę o pomoc. Pozdrawiam i z góry dzięki za odpowiedzi smile.gif
Tomplus
Być może wystarczy abyś dla połączenia z bazą danych ustawił:

mysql_set_charset($link, 'utf8');
blackstone

Ok, spróbuje. Ale muszę zapytać: do czego ma się odnosić się $link ? Ma być przypisana do jakiejś funkcji pobierające dane z bazy sql ?
kapslokk
http://php.net/manual/en/function.mysql-set-charset.php
Wystarczy zajrzeć do dokumentacji.
Pierwszy parametr to charset, drugi to identyfikator połączenia z bazą, nie jest wymagany.
Tomplus
ten $link przydaje się gdy chcesz jednocześnie utworzyć więcej niż jedno połączenie, np. do bazy z innym kodowaniem.
blackstone
Dzięki za odpowiedzi.

Mam bardzo niejednoznaczną sytuację na stronie ( a właściwie stronach bo na razie z zrobiłem to na dwóch ). Mam dwie strony mojej społeczności online którą robię - j
jedna strona wypisuje nazwy założonych tematów a druga to strona wyświetlająca dyskusje w danym temacie. Na tych obydwu stronach kod zasadniczy obsługujący bazę
danych wygląda tak samo, to znaczy :




  1.  
  2. $base = mysql_connect('localhost','root','') or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  3. $db = mysql_select_db('memory') ;
  4. mysql_set_charset('utf8');
  5.  


Efekt tego jest różny. Na stronie wyświetlającej listę tematów wszystko jest ok w 100% ( nic dodać nic ująć ) - tzn tytuły tematów i nicki ich autorów są poprawnie
zapisane z polskimi znakami. Natomiast na stronie wyświetlającej dyskusje po wstawieniu mysql_set_charset('utf8') zmieniło się tylko to że zamiast znakó zapytania
są jakieś inne: np. miało zły (miało zły) , PolakĂłw (Polaków) , duĹźo (dużo). Co mogę z tym zrobić ?


* Próbowałem wstawić do tej funkcji zmienne połączenia z bazą czyli $base a potem $ db tam gdzie w waszych przykładach była zmienna link ale wyskakiwały mi jedynie błędy.
viking
Na początek ustaw odpowiedni nagłówek (w PHP) bo być może serwer wysyła własny. W stopce mam cały artykuł o kodowaniu znaków. Poczytaj.
blackstone
Dziękuje za pomoc, jest już ok....przynajmniej częściowo smile.gif

Treść postów jest w 100% poprawnie zczytywana, ale mam problem z HTML (opisałem go wcześniej ) bo po zmienieniu w meta kodowania na utf 8 "krzaczki" widzi moja przeglądarka w tytule strony. Na stronie Vikinga przeczytałem :

" Ustalanie kodowania poprzez tag meta:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

NIE MA NAJMNIEJSZEGO ZNACZENIA! Jest to potwornie ważna informacja, jeden z powodów tak wielu problemów z “krzakami” na stronie. <meta http-equiv="content-type" … sugeruje jedynie sposób konfiguracji serwera, ustalenie odpowiadających nagłówków. Żaden serwer nigdy tej funkcji nie zaimplementował. "


Czy więc mogę ustawić w seksji meta spokojnie poprzedni sposób kodowania bez obawy o jakieś błędy ? Czyli :

  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
viking
Zależy jaką konfigurację domyślną ma serwer. Jeśli wyśle nagłówek to kod w meta zostanie totalnie zignorowany. Jesli w edytorze zapisałeś plik w UTF-8, a w meta ustawisz ISO - zobaczysz krzaki. Jeśli przeglądarka zaczyta meta ISO a z bazy pójdzie UTF-8 - zobaczysz krzaki w treści bazy.
Po prostu - zapisuj wszystko w UTF-8 i naprawę unikniesz całej masy problemów teraz i w przyszłości. Już nie pamiętam kiedy ostatni raz na ISO pracowałem.
blackstone
"Po prostu - zapisuj wszystko w UTF-8 i naprawę unikniesz całej masy problemów teraz i w przyszłości. Już nie pamiętam kiedy ostatni raz na ISO pracowałem."

Własnie tak teraz robię i mam problem z wszystkim co nie pochodzi z bazy sql. Owszem baza jest zczytywana jak trzeba, ale jeżeli coś z niej nie pochodzi to mam : np "G??wka" . Z czego to wynika? Co tu zrobić? To chyba nie jest problem PHP ale teraz cały projekt jest zatrzymany przez to smile.gif
Fred1485
No ale w bazie masz normalne znaki czy też pytajniki?
blackstone
W bazie mam mam normalne znaki, i wszystko z bazy jest wyświetlanie poprawnie tylko że problem jest związany z tym co z bazy nie pochodzi a jest zapisane w kodzie HTML
andrew654
To musisz teraz ustawić kodowanie pliku, najlepiej utf8 bez BOM i oczywiście poprawić wszystkie krzaczki
blackstone
Właśnie UTF 8 mam ustawione, tylko nie wiem o co chodzi z tym BOM. Można jakiś przykład jak to wyłączyć questionmark.gif
A z tymi kraczkami to chyba nie za bardzo rozumiem, bo one są chyba wynikem złego działania kodowania a nie tego że ja je wpisałem smile.gif
rad11
Otworz plik w notatniku lub notepad++.

Notatnik:

wybierz pilk->zapisz jako->kodowanie->utf8

Notepad++:

format->koduj w UTF-8 bez BOM
andrew654
https://pl.wikipedia.org/wiki/BOM_%28informatyka%29

To taki znacznik na początku pliku, który później może namieszać przy np. przekierowaniach lub tworzeniu sesji. Zawsze wysyła już coś do przeglądarki.
Z krzaczkami może się uda przez zmianę kodowania. Tylko jeśli plik był. np. w windows 1250 przy zmianie kodowania pliku na utf-8 polskie znaki się same nie przekonwertują
blackstone
Zrobiłem coś takiego: plik php w których wystąpił problem przeniosłem do osobnego folderu ( by go odseparować) i skopiowałem jego treść. Następnie otworzyłem nowy plik w notatniku > po czym wkleiłem tam tą treść > dałem "zapisz jako" następnie wybrałem typ zapisu dla wszystkich plików > wpisałem nazwę starego pliku z oczywiście rozszerzeniem " .php" > oraz ustawiłem kodowanie utf-8 > no i zapisałem smile.gif . Po ponownym załadowaniu strony problem znikł. Czy o to chodziło questionmark.gifquestionmark.gif


* Zaczynam podejrzewać że problemem był tu mój edytor tekstu do tworzenia stron - Zajączek 4.1 . Przeglądając ten plik php, zauważyłem że jeden z krzaczków był w pliku... ( a dokładnie mówiąc po pierwszym odświeżeniu nowej strony zapisanej w notatniku jeden z krzaczków się zmienił w inny, więc wszedłem w kod źródłowy i go ręcznie ( w notatniku ) usunąłem ) . Możliwe ? Jeśli tak to może ktoś mi polecić jakiś inny darmowy edytor dla webmasterów ( chodzi mi jedynie o podkreślanie składni, jej przejrzystość ).
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.