Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zmiana nazwy pliku
Forum PHP.pl > Forum > Przedszkole
redelek
Witam,

Robię mały upload. Użytkownicy będą dodawać pliki. Jak wiadomo nie będą oni przestrzegać zasad i pliki będą z polskimi znakami spacjami i innymi dziwactwami.
Chciałbym zamieniać te pliki na normalne czyli bez spacji bez polskich znaków(ale żeby miały podobną nazwę ) Nie chodzi mi o całkowitą zmianę
nazwy pliku bo to wiem jak zrobić. Chodzi o pozbycie się tych dziwactw.

Zrobiłem coś takiego

  1. <?php
  2. $zanki = array('ę','ó','ą','ś','ł','ż','ź');
  3. $zamiana = array('e','o','a','s','l','z','z');
  4. $nazwa_pliku=str_replace($search, $replace, $nazwa_pliku_baz);
  5. $nazwa_pliku=addslashes($nazwa_pliku_baz);
  6. $nazwa_pliku = str_replace(' ', '_', $nazwa_pliku);
  7.  
  8. ?>


Ale niestety plik wysłany na serwer wygląda tak jak_wĺ‚ä…czyä‡_i_wyĺ‚ä…czyä‡_aut.doc.

Będę bardzo wdzięczny za pomoc
Mlodycompany
daj kod uploadu i kodowanie strony
bmL
Niedawno potrzebowałem podobnej rzeczy napisałem sobie taką funkcję, może można prościej ale działa:
  1. <?php
  2. function conv_to_safe_name($var)
  3. {
  4. $find = array('ó', 'ę', 'ą', 'ś', 'ł', 'ż', 'ź', 'ć', 'ń', 'Ó', 'Ę', 'Ą', 'Ś', 'Ł', 'Ż', 'Ź', 'Ć', 'Ń');
  5. $replace = array('o', 'e', 'a', 's', 'l', 'z', 'z', 'c', 'n', 'O', 'E', 'A', 'S', 'L', 'Z', 'Z', 'C', 'N');
  6. $var = str_replace($find, $replace, $var);
  7. $var = preg_replace("([^a-z-_s])", '_', $var);
  8. if(preg_match("/[a-zA-Z]/", $var))
  9. return $var;
  10. else
  11. return 'No_name';
  12. }
  13. ?>


Tylko musisz jeszcze się upewnić czy plik o takiej nazwie nie istnieje bo wtedy albo wyrzuci błąd albo go nadpisze nie jestem pewien. Jeżeli istnieje wypadało by przed kropką dopisać 1 albo 2 etc....

Edit: możliwe, że twój skrypt działałby tak jak należy (w przypadku polskich znaczków z ogonkami) gdyby nie to addslashes. Ale pamiętaj, że istnieją inne dziwne znaki może ktoś wrzuci plik o kojreańskiej nazwie? albo jakieś a "umlaut" - nie wiem jak to sie pisze takie znane z niemieckiego języka "a" z dwoma kreseczkami.
bim2
A ja żeby pomóc w nauce php powiem co było źle smile.gif

  1. <?php
  2. $zanki = array('ę','ó','ą','ś','ł','ż','ź');
  3. $zamiana = array('e','o','a','s','l','z','z');
  4. $nazwa_pliku=str_replace($search, $replace, $nazwa_pliku_baz); // Tutaj się zamienia i jest ok, ale przypisujesz do nowej zmiennej $nazwa_pliku
  5. $nazwa_pliku=addslashes($nazwa_pliku_baz); //Tutaj adslashes powinieneś dodać do $nazwa_pliku, ale dodajesz do pierwotnej naz
    wy z polskimi znakami
  6. $nazwa_pliku = str_replace(' ', '_', $nazwa_pliku); //Tutaj wszystko ok
  7. ?>
-WojtasSP320-
Może to ci się przyda.
Napisałem ostatnio (co prawda jestem jeszcze raczkujący w materii PHP ale działa smile.gif)

Kod
function StrToUrl($text)
{
$polish = array('ˇ','Ć','Ę','Ł','Ń','¦','Ó','Ż','¬','±','ć','ę','ł','ń','¶','ó','ż','Ľ');
$iso    = array('A','C','E','L','N','S','O','Z','Z','a','c','e','l','n','s','o','z','z');

$tmp = str_replace($polish,$iso,$text);
$tmp = ereg_replace("[^0-9a-zA-Z.,)(-]","_",$tmp);
$tmp = ereg_replace("_{2,}","_",$tmp);

if (strlen($tmp)>64) substr($tmp,0,63);
return $tmp;
}


Oczywiście kodowanie na stronie ISO-8859-2
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.