Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Automatyczna zmiana ą, ę, ł ... na a, e, l..., Upload plików
camelx
post
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Wiem, że chyba trzeba wykorzystać tablice, ale nie wiem jak... Bedę bardzo wdzięczny za pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował camelx 24.05.2005, 14:06:27
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
Ociu
post
Post #2





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




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





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




http://forum.php.pl/index.php?showtopic=30786
doczytaj se do konca
Go to the top of the page
+Quote Post
camelx
post
Post #4





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


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





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no ale przypisz coś po zamianie:
$filename=remove_plchars($filename2);
Go to the top of the page
+Quote Post
camelx
post
Post #6





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


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: (IMG:http://a88.a8.funpic.org/i/2.jpg)

Ten post edytował camelx 24.05.2005, 15:00:21
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A jak wygląda ta nazwa pliku. moze masz coś z dużej?

Coś ci ten obrazek się pomylil (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
camelx
post
Post #8





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


nazwa pliku to: ąćęłóśżź.txt
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




a mi zamienia (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował nospor 24.05.2005, 15:11:01
Go to the top of the page
+Quote Post
camelx
post
Post #10





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


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





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




znaczy się że nie otrzymujesz óź, daj echo na pobranej nazwie pliku i pokaz co otrzymasz
Go to the top of the page
+Quote Post
camelx
post
Post #12





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


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

Ten post edytował camelx 24.05.2005, 15:30:47
Go to the top of the page
+Quote Post
kszychu
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


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





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


No rzeczywiście kszychu, miałeś rację, Twój kod działa świetnie.

Jeszcze raz dzieki za pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
hwao
post
Post #17


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




  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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) wszytko ladnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 02:28