[php] upload plików z polskimi znakami diakrytyczymi


(gbartosz83) #1

piszę skrypt upload plików i mam taki nonsesnowy problem:

Chcę zrobić żeby przed upload-em sprawdzał nazwę czy plik nie ma polskich znaków. Generalnie na localhoście skrypt działa prawidłowo z każdym ciągiem znaków

a na serwerze jeśli plik ma same polskie znaki to zmienia nazwę tak że zostaje samo rozszerzenie .jpg.

Wystarczy jedna "normalna" litera w nazwie i skrypt działa poprawnie

"ążłó.jpg" - zmienia na ".jpg"

"ążłów" - zmienia na "azlow.jpg"

tylko na serwerze tak dziwnie zachowuje się skrypt, na localhoscie działa normalnie

serwer i localhost minimalnie różnią sie php ale to nie powinno mieć znaczenia

serwer 5.2.

localhost 5.3


(ra-v) #2

Przez funkcję strtr() można zamieniać litery na kody znaki ASCII. A może podaj kawałek kodu?


(gbartosz83) #3

no właśnie zamieniam, i generalnie strtr czy str_replace działa poprawnie na localhoscie z taką nazwą a na serwerze już nie


(Sitemaster) #4

a to może sprawdź kodowanie strony/skryptu/formularza. Może trzeba by nagłówkiem header wymusić kodowanie....


(gbartosz83) #5

wszystkie pliki mam w kodowaniu uft-8 bez bom


(athei) #6

Podaj kod będzie wiadomo co i jak, mamy zgadywać?


(gbartosz83) #7

to nie jest problem błędów w skrypcie, skrypt działa poprawnie na localhoscie,

teraz jeszcze sprawdziłem jak upload zachowa się bez konwersji polskich liter

i zauważyłem, że jeśli plik zaczyna się od polskiego znaku diakrytycznego znak jest automatycznie usuwany z nazwy pliku,

jeśli natomiast jest już na drugim miejscu w nazwie, nazwa pliku zostanie niezmieniona

wygląda na to że to problem serwera a nie skryptu


(ra-v) #8

Problem ustawień serwera od strony systemu jako takiego, możliwe że systemu plików lub ustawień apache.

$nazwa = "ążłó.jpg";

echo str_tr($nazwa,array('ą'=>'a','ż'=>'z','ł'=>'l','ó'=>'o'));

gbartosz83 - prośba o sprawdzenie powyższego.


(gbartosz83) #9

Jako nazwa pliku:

Na localhoscie => azlo.jpg a na serwerze => .jpg

Jako zwkły łańcuch działa poprawnie

Na localhoscie => azlo.jpg a na serwerze => azlo.jpg


(ra-v) #10

To może gdzieś na górze.

setlocale(LC_ALL, 'pl_PL.UTF-8');

Lub po drobnej przeróbce

$nazwa = "ążłó.jpg";

echo mb_strstr ( $nazwa , array('ą'=>'a','ż'=>'z','ł'=>'l','ó'=>'o') , null , 'UTF-8' )