Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z kodowaniem zmiennych
Forum PHP.pl > Forum > Przedszkole
Lirdoner
Witam, mam taki problem, że pobieram z folderu nazwy plików używając klasy DirectoryIterator i wkładam je do bazy danych mysql
W nazwach tych plików znajdują się polskie znaki i problem jest w tym, że dodając je do bazy otrzymuje w rekordzie ciąg znaków uciętych do pierwszego napotkanego polskiego znaku.
Przykładowo jeżeli plik się nazywa Kraków.jpg to w bazie dostaję samo Krak
Kombinowałem coś z funkcją iconv i dodałem do kodu coś takiego
  1. $filename = iconv(mb_detect_encoding($filename), 'UTF-8', $filename);

Jednak otrzymuję informację
Kod
Notice: iconv(): Detected an illegal character in input string

Pewnie przez to, że w nazwach znajdują się pauzy.
Dodam, że plik php i strona html mają kodowanie ustawione na UTF-8. W bazie danych metoda porównywania napistów to utf8_general_ci
Jak mogę się pozbyć tego problemu? Nie mogę po prostu zignorować polskich znaków gdyż muszą one w bazie być zapisane.
Helid
Możesz zawsze zakodować nazwę pliku (np. przez base64) przed włożeniem do bazy a potem w momencie gdy będzie potrzebna ją odszyfrować.
Lirdoner
nie bardzo bo odkodowana wartość również będzie miała krzaki ;/

Przy wszystkich nazwach funkcja mb_detect_encoding() wykrywa UTF-8 jednak krzaki się pojawiają. Co dziwne nie pojawiają się przy wszystkich nazwach plików. Niektóre wyświetla dobrze ;/
Tajgeer
Metoda porównywania napisów jest dla całej bazy / tabeli / pola?
Lirdoner
No już pomijając bazę, jeżeli po prostu chce na stronie wyświetlić nazwę pliku w dokumencie html to wyskakują krzaki ;/
Tajgeer
W bazie zapisuje się poprawnie? Jak wygląda ten plik HTML?
Lirdoner
W bazie też źle zapisuje.
Zwykły plik html (plik szablonu smarty) z kodowaniem UTF-8. Plik php też ma kodowanie UTF-8

Dodam jeszcze, że na stronie na localhoscie prawie wszystkie pliki mają krzaki wyświetlając ich nazwy natomiast po przerzuceniu na serwer z linuxem nazwy wyświetlają się poprawnie (chociaż nie wszystkie)
gitbejbe
stworz plik zupełnie na nowo w formacie UTF-8 i przeklej kod. Ale jeśi masz ustawione kodowania wszędzie tak jak trzeba czytaj : plik utf-8 , charset i metode porównywania napisów to cholera wie gdzie robisz błąd...
Pjotrek80
Przed SELECT i UPDATE/INSERT

query('SET NAMES utf8');
query('SET CHARACTER_SET utf8_unicode_ci');
Lirdoner
No raczej nic złego zrobić nie mogę. Jeszcze nakreślę trochę sytuację
Jak wrzucam pliki na serwer to przy niektórych polskie znaki zamieniają się na krzaczki - niektóre wrzucają się dobrze (polskie znaki są zachowane)
Natomiast jak wyświetlam listę plików przy użyciu directoryIterator to te pliki które na serwerze mają krzaki wyświetlają się dobrze a te które na serwerze mają polskie znaki wyświetlają się źle.
Usunąłem z dokumentu html informację o kodowaniu i sytuacja się odwróciła. Te pliki co miały krzaki były wyświetlane z tymi krzakami a te co miały polskie znaki zachowane wyświetlały się ok
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.