Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zamiana polskich znaków na "bez ogonków" ?
Forum PHP.pl > Forum > Przedszkole
phpamator
Dzień dobry,
znowu mam pytanie, może głupie ale jednak tongue.gif
Ponieważ bawię się w wordpress'a z woo chciałbym aby stringi generowane jako "slug'i" nie posiadały polskich znaków.
Jak najprościej je podmienić, żeby zachować oczywiście długości i sens (nie licząc braku polskich znaków)?

tylko regex czy istnieje jakaś metoda "re-kodowania" stringów ?

pozdrówka

edyta:
coś znalazłęm ale nie wiem czy od tego czasu coś się nie zmieniło, otóż:

funkcja napisana przez jedengo z forumowiców wygląda tak:

  1. function str2url( $str, $replace = "-" )
  2. {
  3. // konwersja znaków utf do znaków podstawowych;
  4. $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
  5.  
  6. // Niektóre francuskie i niemieckie litery pozostawiają po takiej konwersji (jak powyżej)
  7. // dodatkowe znaki. Poniższe dwie linijki te znaki wycinają;
  8. $charsArr = array( '^', ''', '"', '`', '~');
  9. $str = str_replace( $charsArr, '', $str );
  10.  
  11. $return = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9s]/','',strtolower($str))));
  12. return str_replace(' ', $replace, $return);
  13. }

wywala mi błąd: Warning: preg_replace(): No ending delimiter '+' found in ....

Zastosowałem prosty preg_replace i polskie znaki sa poprostu podmieniane ... działa. Czy dobrze to się okażę ale wystarczy narazie tongue.gif
vokiel
Masz wiele gotowych paczek https://packagist.org/packages/sluggergen/s...r?query=slugger

Możesz też sobie zrobić tablicę znaków z ogonkami i ich odpowiednikami do podmiany, typu ą => a itd.

Co do Twojego kodu, to
1.
  1. // Brak escapowania apostrofu w drugiej grupie
  2. $charsArr = array( '^', ''', '"', '`', '~');
  3. // powinno być:
  4. $charsArr = array( '^', '\'', '"', '`', '~');


2. Nie mieszaj ereg_replace z preg_replace, w zasadzie o ereg* możesz zapomnieć.
3. W linii 11 w ogóle nie potrzebujesz tego ereg_replace, zamieniasz tam przecież tyko plusa na pusty znak, czyli zwykłe str_replace wystarczy.
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-2024 Invision Power Services, Inc.