Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] konwersja polskich znaków do łaćińskich odpowiedników, czyli zmina 'ą' na 'a', 'ć' na 'c', it
barthpl
post
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

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


witam,

Czy ktoś ma może pomysł/wiedzę w jaki sposób dokonać konwersji polskich znaków do ich łacińskich odpowiedników. Znaczy się aby we wskazanym stringu wszystkie wystąpienia 'ą' zamienić na 'a' i tak ze wszystkimi polskimi znakami.

Mój obecny pomysł to:
  1. <?php
  2. $arg1 = array('ą', 'Ą', 'ć', 'Ć', 'ę', 'Ę', 'ł', 'Ł', 'ń', 'Ń', 'ó', 'Ó', 'ś', 'Ś', 'ź', 'Ź', 'ż', 'Ż' );
  3. $arg2 = array('a', 'a', 'c', 'c', 'e', 'e', 'l', 'l', 'n', 'n', 'o', 'o', 's', 's', 'z', 'z', 'z', 'z' );
  4. $out = str_replace ( $arg1, $arg2, $str );
  5. ?>

Osobiście mi się to nie bardzo podoba i szukam czegoś bardziej automatycznego.

Podobną zamianę chciałbym dokonać na literkach francuskich i niemieckich. Wszelkie pomysły mile widziane. Z góry dzięki.

Ten post edytował boguszewski 24.07.2008, 13:34:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
barthpl
post
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

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


Wtedy nie udało mi się znaleźć tego "milion razy". Jednak jakiś czas potem pojawił się temat gdzie problem został rozwiązany (post: http://forum.php.pl/php_Jak_stworzyc_funkc...ie_t100607.html).

Dzięki pomysłom (przykładom) przedstawionym przez uczestników tamtej dyskusji napisałem następującą funkcję:
  1. <?php
  2. function str2url( $str, $strtolower = true )
  3. {
  4. // konwersja znaków utf do znaków podstawowych;
  5. $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
  6.  
  7. // Niektóre francuskie i niemieckie litery pozostawiają po takiej konwersji (jak powyżej) 
  8. // dodatkowe znaki. Poniższe dwie linijki te znaki wycinają; 
  9. $charsArr = array( '^', ''', '"', '`', '~');
  10. $str = str_replace( $charsArr, '', $str );
  11.  
  12. $str = preg_replace( "/[^a-z0-1-]{1}/i", '_', $str );
  13. while( strcmp($str, $str = str_replace( array('__', '--'), array('_', '-'), $str)) != 0 );
  14. return $strtolower ? strtolower( $str ) : $str;
  15. }
  16. ?>


Funkcja transformuje przekazany string ($str) do postaci złożonej tylko i wyłącznie z standardowych liter [a-z], cyfr [0-1] oraz znaków _ i -. Wielokrotne połączenie _ lub - będzie zredukowane do jednego znaku (odpowiednio _ lub -). Jeżeli drugi parametr ($strtolower) będzie ustawiony jako true (domyślna wartość) funkcja zmieni wielkość wszystkich liter na małe. W przeciwnym wypadku wielkość liter nie ulegnie zmianie.

Przykładowe użycie
  1. <?php
  2. echo $str = 'ąęśćłńóżźßüöäëáéíúçčîôŕâęűůďń------____';
  3. echo str2url( $str );
  4. ?>

da następujący efekt
Kod
ąęśćłńóżźßüöäëáéíúçèîôàâêûùïñ------____
aesclnozzssuoaeaeiuceioaaeuuin-_


Uwaga: wszystkie znaki zostaną pozbawione ogonków, akcentów i 'umlałtów'. Niemieckie 'ß' zostanie zamienione na 'ss' i zawsze będą to małe litery.
Go to the top of the page
+Quote Post

Posty w temacie


Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 04:09