Kodowanie znaków z MSSQL za pomocą PHP

Kodowanie znaków z MSSQL za pomocą PHP
MB
  • Rejestracja:około 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:29
0

Cześć,
mam problem z kodowaniem znaków w mojej apce webowej.
Używam Notepad++ (tak, wiem, że są lepsze edytory), wyświetlam dane z bazy MSSQL za pomocą PHP i w momencie napotkania na polski znak dostaję to, co na screenie.
Tak jest z wszystkimi polskimi znakami.
W pliku wykorzystuje <meta charset="utf-8"> a sama baza to Polish_CI_AS.

Czy miałby ktoś rozwiązanie mojego problemu lub widnieje gdzieś na forum? (szukałem ale nie znalazłem)
screenshot-20220317122521.png

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
2

na 99% musisz ustawić odpowiednie (UTF8) kodowanie po stronie klienta (tego czym się z PHP do bazy łączysz)


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 minuty
  • Postów:3510
3

Ten brak znaków jest w przeglądarce czy linii komend?
Spróbuj na początku pliku dać:
ini_set('mssql.charset', 'UTF-8');
lub na samym połączeniu:

Kopiuj
        "Database"=>'name',
        "ConnectionPooling"=>0,
        "CharacterSet"=>"UTF-8"
        ];
MB
W przeglądarce
jurek1980
W kodzie zmień albo na początku pliku, gdzie się łączysz ustawiasz zmienną, zobacz jak działa ini_set. Albo tam gdzie tworzysz połączenie z bazą, wskazujesz bazę itd. Pytanie o przeglądarkę było, dlatego że niechcący mogłeś dodać jakiś nagłówek z kodowaniem do strony który powoduje problem. https://www.w3.org/International/questions/qa-html-encoding-declarations Także najpierw spróbuj pozmieniać ustawienia połączenia i zwróć uwagę na nagłówek strony, czy wszędzie masz UTF-8
WL
  • Rejestracja:ponad 21 lat
  • Ostatnio:20 dni
  • Postów:1083
1

Wszystko pięknie ładnie, ale collation Polish_CI_AS w MSSQL to jest dokładnie kodowanie znaków Windows1250 case insensitive, accent sensitive
A więc NIE jest to UTF8.

Nie wiem co i jak PHP robi, ale ustawienie kodowania na kliencie niezgodnego z bazą danych raczej nie rozwiąże problemu.
Czy rozwiąże w przypadku PHP, bo robi automagiczną konwersję?

jurek1980
z dnia na dzień się zapomina szczegóły, a nie było tak że jak Nvarchar się ustawiło na kolumnie to i tak pchał dane jako UCS-2
abrakadaber
abrakadaber
na 99% PHP zrobi automagiczną konwersję :)
MB
  • Rejestracja:około 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:29
0

Więc co powinienem zrobić?
Zauważyłem, że jak w pliku php.ini zmieniam default_charset to zmieniają się znaki ale nigdzie nie wyświetla mi polskich, w dodatku czasami psują się te napisane "z palca" a nie wyciągane z bazy danych.

MB
  • Rejestracja:około 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:29
0

@jurek1980:
Dokładne rozwiązanie: do pliku z połączeniem do bazy, do sqlsrv_connect dodałem "CharacterSet"=>"UTF-8".

Dziękuję za pomoc :)

miccom
  • Rejestracja:prawie 3 lata
  • Ostatnio:około 2 lata
  • Lokalizacja:Tychy
  • Postów:25
0

A pokaż, jaki tekst masz w bazie danych?
W BD masz polskie znaki?

Sprawdź jeszcze, czy w swoim IDE masz ustawione kodowanie znaków.
Musisz mieć ustawione UTF-8 bez BOM

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1

@miccom: temat został rozwiązany ponad 3 miechy temu - próbujesz wygrać konkurs na złoty szpadel???


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.