Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z kodowaniem zmiennych
Lirdoner
post
Post #1





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Helid
post
Post #2





Grupa: Zarejestrowani
Postów: 280
Pomógł: 20
Dołączył: 12.12.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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ć.


--------------------
Go to the top of the page
+Quote Post
Lirdoner
post
Post #3





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

Ostrzeżenie: (0%)
-----


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 ;/
Go to the top of the page
+Quote Post
Tajgeer
post
Post #4





Grupa: Zarejestrowani
Postów: 290
Pomógł: 48
Dołączył: 11.05.2008
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Metoda porównywania napisów jest dla całej bazy / tabeli / pola?
Go to the top of the page
+Quote Post
Lirdoner
post
Post #5





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

Ostrzeżenie: (0%)
-----


No już pomijając bazę, jeżeli po prostu chce na stronie wyświetlić nazwę pliku w dokumencie html to wyskakują krzaki ;/
Go to the top of the page
+Quote Post
Tajgeer
post
Post #6





Grupa: Zarejestrowani
Postów: 290
Pomógł: 48
Dołączył: 11.05.2008
Skąd: Kielce

Ostrzeżenie: (0%)
-----


W bazie zapisuje się poprawnie? Jak wygląda ten plik HTML?
Go to the top of the page
+Quote Post
Lirdoner
post
Post #7





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
gitbejbe
post
Post #8





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
Pjotrek80
post
Post #9





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


Przed SELECT i UPDATE/INSERT

query('SET NAMES utf8');
query('SET CHARACTER_SET utf8_unicode_ci');
Go to the top of the page
+Quote Post
Lirdoner
post
Post #10





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 18:23