Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Problem ze znakami
Forum PHP.pl > Forum > PHP
fardbleecker
Witam. Mam pewien problem. Przerabialem skrypt pobierający ostatnie tematy z forum tak abym mogl go wstawic w JavaScript (i w .tpl na stronke) i teraz nie wiem jak zrobic by wczytywał polskie znaki. Próbowałem róznych kodowań ale nadal pobiera np. "PromujÄcy" zamiast "Promujący". Nie mogę wstawić <meta ... > bo wtedy nie przeczyta skryptu.
  1. <?
  2. define('IN_PHPBB', true);
  3. $phpbb_root_path = ''; // Path to phpbb folder
  4. $phpEx = substr(strrchr(__FILE__, '.'), 1);
  5. include($phpbb_root_path . 'common.' . $phpEx);
  6. include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
  7.  
  8. // Start session management
  9. $user->session_begin();
  10. $auth->acl($user->data);
  11.  
  12. // Grab user preferences
  13. $user->setup();
  14.  
  15. /*** phpBB3 - Last Active Topics System ***/
  16. //Show last x topics
  17. define('TOPICS_LIMIT',10);
  18.  
  19. // Create arrays
  20. $topics = array();
  21.  
  22. // Get forums that current user has read rights to.
  23. $forums = array_unique(array_keys($auth->acl_getf('f_read', true)));
  24.  
  25. // Get active topics.
  26. $sql="SELECT *
  27. FROM " . TOPICS_TABLE . "
  28. WHERE topic_approved = '1' AND " . $db->sql_in_set('forum_id', $forums) . "
  29. ORDER BY topic_last_post_time DESC";
  30. $result = $db->sql_query_limit($sql,TOPICS_LIMIT);
  31. while ($r = $db->sql_fetchrow($result))
  32. {
  33. $topics[] = $r;
  34. }
  35. $db->sql_freeresult($result);
  36. ?>document.writeln('Nowe tematy na forum:<br>');
  37. <?
  38. foreach($topics as $t)
  39. {
  40. // Get folder img, topic status/type related information
  41. $topic_tracking_info = get_complete_topic_tracking($t['forum_id'], $t['topic_id']);
  42. $unread_topic = (isset($topic_tracking_info[$t['topic_id']]) && $t['topic_last_post_time'] > $topic_tracking_info[$t['topic_id']]) ? true : false;
  43. $folder_img = $folder_alt = $topic_type = '';
  44. topic_status($t, $t['topic_replies'], $unread_topic, $folder_img, $folder_alt, $topic_type);
  45.  
  46. // output the link
  47. ?>document.writeln('<img style=\"vertical-align: text-bottom\" width=\"16\" height=\"16\" src=\"/forum/<?=$user->img($folder_img, $folder_alt, false, '', 'src');?>\"/><a href="/forum/<?=$phpbb_root_path . 'viewtopic.php?f=' . $t['forum_id'] . '&t=' . $t['topic_id'] . '&p=' . $t['topic_last_post_id'] . '#p' . $t['topic_last_post_id'];?>"><?=html_entity_decode($t['topic_title']);?></a><br>');
  48. <?
  49. }
  50. ?>
tomxx
Cytat(fardbleecker @ 1.11.2013, 02:50:36 ) *
Nie mogę wstawić <meta ... > bo wtedy nie przeczyta skryptu.


Jak to nie przeczyta?
Turson
Jaki charset ma plik? W edytorze jaki format plików jest?
session
Uniwersalne sposoby radzenie sobie z problemami z kodowaniem:

Baza MySQL:
1. Sprawdź jakie kodowanie jest ustalone dla całej bazy danych z którą się łączysz
2. Sprawdź czy takie samo kodowanie jest ustalone dla tabeli, z której pobierasz dane
3. Sprawdź w strukturze tabeli czy pola (tekstowe), z których pobierasz poszczególne rekordy mają takie samo kodowanie
4. Sprawdź czy prawidłowo wyświetlają się znaki w istniejących już rekordach

Pliki:
1. Sprawdź kodowanie ustalone dla pliku, w którym znajduje się skrypt pobierający dane z bazy ( do sprawdzenia kodowania i ewentualnej jego zmiany nadaje się taki edytor tekstu jak Notepad++ )
2. Sprawdź czy kodowanie ustalone dla pliku, w którym będziesz wyświetlał dane ma takie samo kodowanie
3. Sprawdź kodowanie ustalone w tagu meta charset głównego pliku

PHP:
1. Sprawdź czy funkcje PHP, których używasz do manipulacji ciągiem obsługują polskie znaki
2. Po połączeniu z bazą danych możesz wysłać zapytanie ustawiające kodowanie danego połączenia:
  1. mysqli_query($mysqli,'set names utf8');
W przypadku phpbb, jak się domyślam ( bo nigdy nie korzystałem) będzie:
  1. $db -> sql_query('set names utf8');


Do tego możesz przygotować najprostszy możliwie plik, który pobiera 1 rekord z bazy ( ciąg zawierający polskie znaki ) i wyświetla je. Łatwiej będzie zlokalizować Ci przyczyną problemów.
Czasami problem istnieje w skrypcie zapisującym dane do bazy, ale jeśli w innych częściach strony te same rekordy wyświetlają się poprawnie to odrzuciłbym w ogóle sprawdzanie MySQL.

Mam nadzieję, że któryś ze sposobów pomoże wink.gif
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.