[Ajax][PHP][MySql] Wyświetlanie z bazy, brak polskich znaków


(Sam 19n) #1

Witam,

Mam problem z wyświetleniem danych z bazy danych. Na całej stronie kodowanie jest poprawne, a w skrypie Ajax/php , dzięki którym pobieram dane z bazy nie wyświetla polskich znaków. Tylko krzaczki. Zmieniałem kodowanie i bazie jest ono poprawne, na stronie też jest, a mimo to w jednym miejscu na stronie nie. Jest to skrypt pobierający dane z bazy i za pomocą ajaxa paginowany na stronie.

Wspomagałem, się tym skryptem.

http://www.99points.info/2011/01/ajax-pagination-using-jquery-and-php-with-animation/

Jaka to może być przyczyna?


(system) #2

Zmień kodowanie pliku AJAX. Może o nim zapomniałeś.

Jakie kodowanie masz ustawione?


(Sam 19n) #3

wszędzie UTF-8.

gdzie dokładnie zmienić kodowanie pliku ajax?

ustawiałem w kilku różnych miejscach i nadal bez skutku.


(ra-v) #4

W skrypcie masz podane wywołanie w AJAX

data.php?page=....

Zakładając że wyświetlanie masz w pliku data.php to umieść w nim przed pierwszym “echem” (czyli wysłaniem treści na ekran)

header('Content-type: text/html; charset=utf-8'); [/code]

(Sam 19n) #5

właśnie tak robiłem wcześniej, ale to nie pomogło…

tak i zrobiłem teraz efektu nadal nie ma,


(ziggurad) #6

Jeśli używasz jakiegoś edytora kodu sprawdź jakie masz ustawienie w tym pliku. Np Format / Kodowanie coś w tym stylu, tam też musisz wybrać UTF-8


(system) #7

Dokładnie o to mi chodziło.


(Sam 19n) #8

Wszystkim plikom ustawione kodowanie jest utf-8. To zrobiłem jako pierwszą czynność na początku… ale to nic nie dało


(batmomobil) #9

Pierwsze pytanie czy dane zapisywane w bazie masz już zakodowane w UTF-8,jeśli tak to zobacz czy w tabeli ustawione masz kodowanie utf8_polish_ci.Teraz w pliku php dajesz

header('Content-type: text/html; charset=utf8');

mysql_query("SET CHARSET utf8_general_ci");

mysql_query("SET NAMES 'utf8_general_ci' COLLATE 'utf8_polish_ci'");

oczywiście dokładnie z ustawieniami w bazie.Spróbuj może to coś da???


(Sam 19n) #10

Zrobiłem wszystko tak jak pisaliście… A problem nadal występuje.

MyISAM utf8_polish_ci

to dla bazy danych A to kod który odpowiedzialny jest za wyświetlanie danych z bazy, w pliku dbcon.php jest samo połączenie do bazy(2 linijki).

<?php     


header('Content-type: text/html; charset=utf8');


include("dbcon.php");




$per_page = 4;

$sqlc = "show columns from records";

$rsdc = mysql_query($sqlc);

$cols = mysql_num_rows($rsdc);

$page = $_REQUEST['page'];

mysql_query("SET CHARSET utf8_polish_ci");

mysql_query("SET NAMES 'utf8_polish_ci' COLLATE 'utf8_polish_ci'");

$start = ($page-1)*4;

$sql = "select * from records order by id DESC limit $start,4";

$rsd = mysql_query($sql);


?>


<?php

while ($rows = mysql_fetch_assoc($rsd))

{?>

?php }? [/code]

Ma ktoś jakiś pomysł, co mogę zrobić, żeby polskie znaki były przy pobieraniu danych z bazy?


(batmomobil) #11

Jeśli chcesz odczytać jakieś dane w danym kodowaniu,to w takim samym musisz je zapisywać do bazy,inaczej będą krzaki.w Takim samym kodowaniu ustawiasz bazę.Kodowanie bazy prawdopodobnie masz w utf_8_general_ci,zobacz jakie kodowanie ma tabela,może być czasami w latin i ustaw wiersz w tabeli na utf_8_plisch_ci.Wtedy na początku pliku php dajesz

session_start(); include("config.php"); header('Content-type: text/html; charset=utf8');

mysql_query("SET CHARSET utf8_general_ci");

mysql_query("SET NAMES 'utf8_general_ci' COLLATE 'utf8_polish_ci'");

i to samo dajesz gdzie masz formularz.No i nie zapomnij zrobić konwercji pliku na dene kodowanie.


(Sam 19n) #12

Jest wszystko ustawione jak napisałeś, ale to na prawdę nie pomaga.

Pozostają mi tylko encje? Już nie wiem co mógłbym jeszcze zmienić i gdzie? w bazie jest utf8_polish_ci, do skryptu dodałem te linijki kodu, ale nadal mam krzaczki.


(system) #13

Ustalmy coś.

1. Masz wszystkie pliki z kodowaniem UTF bez BOM

2. Baza danych i wszystkie jej tabele mają kodowanie utf8_general_ci

3. Wszystkie wiersze w tabelach mają kodowanie utf8_general_ci

Więc ja powiem Ci tak. Zawsze daję kodowanie utf8_general_ci i ustawiam je wszędzie.

Zdaje się że dokładnie przejrzałem posty. Według mnie sprawa wygląda chyba tak, że plik AJAX, który pobiera wyniki z bazy i którego wyświetlasz najprawdopodobniej tak:

$.post('plik_ajax_co_pobiera_z_db.php', {zmienna:zmienna}, function(output){

	$('selektor').html(output);

})

ma posypane kodowanie. Plik plik_ajax_co_pobiera_z_db.php powinien mieć w środku ustawione kodowanie na polskie znaki. Czyli coś w ten deseń:

<?php header ('Content-type: text/html; charset=utf-8');

	//jakiś kod php tutaj

?>

Taka kombinacja nie ma prawa nie działać.

Jakiego używasz edytora plików do pisania tej aplikacji?


(ra-v) #14

4. Po połączeniu i wybraniu bazy zawsze dajemy

mysql_query("SET NAMES utf8");[/code]

Czasem się zdarza, że standardowe kodowanie bazy danych jest inne i przez to też pojawiają się krzaki.


(batmomobil) #15

(Sam 19n) #16

Ok, dzięki za pomoc. W końcu udało się z tym. Ale mam kolejny problem, bo Internet Explorer od wersji 8(włącznie) w dół, nie wyświetla tego skryptu. Inne przeglądarki nie mają z tym problemu.

Co może być przyczyną?


(ra-v) #17

Odpal IE9, wciśnij F12, wybierz tryb IE8 oraz zakładkę Console. Zobacz czy nie ma błędów JS.