Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]zamiana polskich znaków na "bez ogonków" ?
phpamator
post
Post #1





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


Dzień dobry,
znowu mam pytanie, może głupie ale jednak (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/tongue.gif)


Ten post edytował phpamator 29.04.2020, 11:38:13
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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.
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: 6.10.2025 - 02:57