Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automatyczna zmiana ±, ę, ł ... na a, e, l...
Forum PHP.pl > Forum > Przedszkole
camelx
Mam system do uploadu plików na serwer. Chcę, żeby podczas uploadu wszystkie polskie literki w nazwie pliku zmieniały sie na ich odpowiedniki bez ogonków (± na a, ę na e, itd.) Zrobiłem co¶ takiego
  1. <?php
  2. $filename = jaki¶_plik;
  3. $filename2 = str_replace(&#092;"¶\",\"s\",$filename); // zamiana ¶ na s
  4. ?>

Co zrobić, żebym nie musiał robić str_replace dla każdej literki questionmark.gif
Wiem, że chyba trzeba wykorzystać tablice, ale nie wiem jak... Bedę bardzo wdzięczny za pomoc smile.gif
Ociu
Może tak ?:
  1. <?php
  2. $zmieniam = array(&#092;"¶\" => \"s\");
  3. foreach($zmienam AS $pol => $en)
  4. {
  5. str_replace($pol, $en, $zmieniam);
  6. }
  7.  
  8. ?>
nospor
http://forum.php.pl/index.php?showtopic=30786
doczytaj se do konca
camelx
Nistety to nie działa. mój ko wygl±da tak
  1. <?php
  2. $filename = $HTTP_POST_FILES['plik']['name']; // nazwa pliku przed sformatowaniem
  3.  
  4. function remove_plchars($txt)
  5. {
  6.  
  7. $array=array(
  8. '±'  => 'a',
  9. 'ć'  => 'c',
  10. 'ę'  => 'e',
  11. 'ł'  => 'l',
  12. 'ó'  => 'o',
  13. '¶'  => 's',
  14. 'ż'  => 'z',
  15. 'Ľ'  => 'z');
  16.  
  17.   return strtr($txt, $array);
  18.  
  19. }//endfunction remove_plchars();
  20.  
  21. $filename2 = str_replace(&#092;" \",\"_\",$filename); // zamiana spacji na \"_\"
  22. remove_plchars($filename2); // zmiana pol na en
  23. echo $filename2;
  24. ?>

Niestety to mi nie działa. Wy¶wietlaja się polskie znaki...
nospor
no ale przypisz co¶ po zamianie:
$filename=remove_plchars($filename2);
camelx
No dobrze, już prawie działa. Większo¶ć literek się zamienia, bez zmian pozostaj± tylko "±", "ó" i "Ľ". Dlaczego tak się dzieje ?
Dodam, że ten fragment kodu w moim edytorze (phpEdit) wygl±da tak:
nospor
A jak wygl±da ta nazwa pliku. moze masz co¶ z dużej?

Co¶ ci ten obrazek się pomylil tongue.gif
camelx
nazwa pliku to: ±ćęłó¶żĽ.txt
nospor
a mi zamienia biggrin.gif
  1. <?php
  2. function remove_plchars($txt)
  3. {
  4.  
  5. $array=array(
  6. '±'  => 'a',
  7. 'ć'  => 'c',
  8. 'ę'  => 'e',
  9. 'ł'  => 'l',
  10. 'ó'  => 'o',
  11. '¶'  => 's',
  12. 'ż'  => 'z',
  13. 'Ľ'  => 'z');
  14.  
  15.  return strtr($txt, $array);
  16.  
  17. }//endfunction remove_plchars();
  18.  
  19. $filename2='±ćęłó¶żĽ.txt';
  20. $filename2=remove_plchars($filename2); // zmiana pol na en
  21. echo $filename2;
  22.  
  23. ?>
camelx
mi też zmienia jeżeli napiszę sobie $filename2='±ćęłó¶żĽ.txt'; ale przy uploadzie jak mam $filename = $HTTP_POST_FILES['plik']['name']; już nie działa :/. ó, ±, Ľ się nie zmianiaj±...
nospor
znaczy się że nie otrzymujesz óĽ, daj echo na pobranej nazwie pliku i pokaz co otrzymasz
camelx
Chyba jest ok. Wrzuciłem plik "ziółko.txt" i wszystko się zamieniło. To była pewnie wina tego zestawienia znaków obok siebie, ale chyba nikt nie będzie dodawał pliku o nazwie '±ćęłó¶żĽ'...

Wielkie dzięki za pomoc!

edit----

Ľ się wci±ż nie zamienia. Wrzuciłem plik "maĽ.txt" i się nie zamieniło. Może jest jaka¶ inna przyczyna...
kszychu
Wszystko jest OK, tylko masz nazwę pliku zapisan± prawdopodobnie z kodowaniem windows, a w tablicy konwersji masz znaki w iso. W takich przypadkach sprawdza się mój kod, który zamie¶ciłem w jednym z niedawnych w±tków. Kto¶ tam pisał, że nie działa, ale jest on sprawdzony i działa w wielu moich aplikacjach.
camelx
No rzeczywi¶cie kszychu, miałe¶ rację, Twój kod działa ¶wietnie.

Jeszcze raz dzieki za pomoc smile.gif
dr_bonzo
iconv" title="Zobacz w manualu PHP" target="_manual
Cytat
string iconv ( string in_charset, string out_charset, string str )

Performs a character set conversion on the string str from in_charset to out_charset . Returns the converted string or FALSE on failure.

If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can't be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.


i konwertujemy z iso/win/inny na latin1 z //TRANSLIT, chociaz nie dzialao mi to kiedys, ale polecam sprawdzic.
camelx
No i znów mam mały problem. Umie¶ciłem stronkę na serwerze funpic.org i tam mi nie działa to zamienianie znaków. U mnie na serwerze i na host.sk wszysko działa bez problemu. Może na funpic.org jest jakie¶ inne kodowanie (nie znam się na tym)...
Jak my¶licie, jaki jest powód questionmark.gif
hwao
  1. <?php
  2. function remove_chars( $string ) {
  3. return preg_replace( '#[^a-z0-9_.]#i', '_', $string );
  4. }
  5. $string = 'jaka¶_nazwa pliku.jpg';
  6. echo 'Orginalny: '.$string.'<br/>';
  7. echo remove_chars( $string );
  8. ?>

Tak i po problemie winksmiley.jpg wszytko ladnie winksmiley.jpg
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.