Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przesyłanie tablicy danych - problem z kodowaniem
Forum PHP.pl > Forum > Przedszkole
Agape
Witam, mam skrypt który przechowuje w pliku tablice slow. Potrzebuję przesłać tą tablicę w formie nienaruszonej na drugi serwer przez curl i odczytać tam ją. Mam wszystko zrobione ale serwer docelowy partaczy kodowanie. Przykładowe slowo espańol i zamist ń jest znak zapytania ...

Na serwerze A zapisuje dane do pliku w formie json_encode($tablica_danych) a pozniej wysylam metoda POST przez curl zmienna ktora jest tablica json:
Kod
$slowa = urlencode( file_get_contents('tablica_danych.txt') );


nastepnie na serwerze B mam:
Kod
$slowa = json_decode( urldecode($_POST['slowa']), true);


no i wlasnie ten kod mnie doprowadzil do slepego zaulku ... probowalem do json_encode dodac JSON_UNESCAPED_UNICODE ale to zmienilo tylko sposob w jaki serwer B przekreca slowa :/ tekst ktory chce przekazac bedzie w roznych jezykacj, francuski, wloski itp.

Jakis pomysl jak przesylac ta tablice zeby poprawnie odczytywac znaki diakrytyczne ? Plik do ktorego wysylam dane ma na gorze:
  1. header('Content-type: text/html; charset=utf-8');
Agape
ok okazało się jednak że blad jest gdzie indziej, kodowanie jest dobre, wyswietla sie z prawidlowym znakiem ale to przy zapisie do bazy danych powstaja "krzaki" przy znakach diakrytycznych ... dodaje do bazy danych przez model ktory w konstruktorze ma:

  1. $this->db = new PDO('mysql:host='.$this->db_config['host'].';dbname='.$this->db_config['db_name'].';encoding=utf8', $this->db_config['username'], $this->db_config['password']);
  2. $this->db -> exec("SET CHARACTER SET utf8");
  3. $this->db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );


Dodaje wpisy poprzez $this->query($sql); Cała baza i wszystkie jej tabele maja kodowanie utf8_general_ci, plik który obsluguje żadania w nagłówku ma ustawione kodowanie UTF-8 ... skończyły mi się pomysły co to może być :/
andrew654
A próbowałeś:

  1. $this->db -> exec("SET NAMES utf8");


Agape
@andrew654 dziękuję Ci ślicznie, nigdy nie używałem tego i było dobrze a teraz było potrzebne i pomogło smile.gif
viking
Dla mysql możesz też na poziomie tworzenia instancji PDO:

  1. $pdo = new PDO(
  2. 'mysql:host=hostname;dbname=defaultDbName',
  3. 'username',
  4. 'password',
  5. array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
  6. );
andrew654
@Agape spoko, też kiedyś kilka dni przeszukiwałem internet zanim doszedłem to set names utf-8. Teraz już mam taki pliczek z configiem do bazy i zawsze go używam, żeby czegoś nie pominąć przypadkiem 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.