Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> upload plików - bezpieczna nazwa, jak przetworzyć nazwę pliku...
Birkoff
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 23.10.2003
Skąd: Gdańsk

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


Witam wszystkich zainteresowanych!

Uploaduje plik - raczej w standardowy sposób, bez udziwnień - kopiuje plik przez formularz, potem sprawdzenie czy jest skopiowany, potem wygenerowanie bezpiecznej nazwy i zapisanie go pod ta nazwa w katalogu docelowym.

Sprawa dotyczy właśnie tej bezpiecznej nazwy. Przepuszczam nazwe pliku przez taką funkcję:

  1. <?php
  2.  
  3. function safe_name($name) {
  4.     $name=trim($name);
  5.     $name=str_replace(&#092;" \", \"_\", $name);
  6.     $name=str_replace(&#092;"ś\", \"s\", $name);
  7.     $name=str_replace(&#092;"ć\", \"c\", $name);
  8.     $name=str_replace(&#092;"ą\", \"a\", $name);
  9.     $name=str_replace(&#092;"ó\", \"o\", $name);
  10.     $name=str_replace(&#092;"ż\", \"z\", $name);
  11.     $name=str_replace(&#092;"Ľ\", \"z\", $name);
  12.     $name=str_replace(&#092;"ń\", \"n\", $name);
  13.     $name=str_replace(&#092;"ł\", \"l\", $name);
  14.     $name=str_replace(&#092;"ę\", \"e\", $name);
  15.     $name=str_replace(&#092;"'\", \"_\", $name);
  16.     return $name;
  17.     }
  18.  
  19. ?>


Jak widać funkcja ta zamienia polskie naki zakodowane w iso-8859-2 na uniwersalne znaki z podstawowego zestawu liter z alfabetu...

Pytanie: jak przerobić tą funkcję na bardziej uniwersalną?

Jest ona dobra dla polskich znakow, ale co z innymi? RObię dajmy na to stronę dla Francuzów, a oni mają te swoje porypane akcenty, do tego kodowanie iso-8859-1.

Jak sprytnie przekonwertować taką nazwę na zakres podstawowych liter alfabetu A-Z i a-z oraz 1-9 bez żadnych dodatkowych literek, zamieniajac wszystkie spoza tego zakresu na znak podkreslenia: _ (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Podejrzewam, że możnaby użyć wyrażeń regularnych ale nie mam pojęcia jak...
Jeśli ktoś ma jakiś pomysł/gotowy skrypt/dobrą radę to bardzo proszę o pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Przenoszę: Skrypty php -> php / crashu
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
crash
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Coś wg. mnie uniwersalniejszego:
  1. <?php
  2. $wyr = 'ChrząśżćźŁE';
  3.  
  4. $now = '';
  5.  
  6. for( $i = 0; $i < strlen( $wyr ); $i++ )
  7. {
  8.    if( ord( $wyr[ $i ] ) < 48 or ord( $wyr[ $i ] ) > 122 )
  9.    {
  10.       $now .= '_';
  11.    } 
  12.    else
  13.    {
  14.       $now .= $wyr[ $i ];
  15.    }
  16. }
  17. echo $now;
  18. ?>

Dobra, świetny jestem, to samo zrobi:
  1. <?php
  2. echo preg_replace( '/[^a-zA-Z0-9]{1}/', '_', $wyr );
  3. ?>
Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 06:33