Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zamiana polskich znaków
Levi3r
post 1.11.2013, 01:32:29
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 1.11.2013

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


Witam,
Ten temat był już setki razy wałkowany na tym forum i nie tylko, ale wszystko co znalazłem nie chciało działać sad.gif Najprawdopodobniej dlatego, że moje umiejętności php są żadne, ale do rzeczy. Chciałbym aby w adresie url wyświetlały się znaki bez polskich ogonków zamiast ą-a itp. Jedyne co udalo mi się osiągnąć to to, że wszystkie niepotrzebne znaki są wycinane z url co w przypadku liter mija się z celem. x. Do tej pory korzystałem z takiego kodu:
  1. function seo($name, $id) {
  2. $remove_illegal = str_replace(array('\\','/', ':','*','?','"','<','>','|', "'", '.', '`', '!', '#', '¤', '%', '&', '(', ')', '$', '€', '{', '[', ']', '}', ','),'',$name);
  3. $new_n = str_replace(' ', '-', trim($remove_illegal));
  4. return strtolower($id."-".$new_n);

w str_replace były dopisane jeszcze polskie literki. Kodowanie w phpmyadmin mam utf8_general_ci
Proszę Was bardzo o łopatologiczne wyjaśnienie co, jak i gdzie zrobić żeby zadziałało

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Damonsson
post 1.11.2013, 01:38:02
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Osobiście używam czegoś takiego, wycinek odpowiedzialny za zmianę poniżej:

  1. <?php
  2.  
  3. class Slugify {
  4.  
  5. function toSlug($string, $space = "-") {
  6. if (function_exists('iconv')) {
  7. setlocale(LC_CTYPE, 'pl_PL');
  8. $string = @iconv('UTF-8', 'ASCII//TRANSLIT', $string);
  9. }
  10. $string = preg_replace("/[^a-zA-Z0-9 -]/", "", $string);
  11. $string = strtolower($string);
  12. $string = str_replace(" ", $space, $string);
  13. return $string;
  14. }
  15.  
  16. }
  17.  
  18. ?>
Go to the top of the page
+Quote Post
SmokAnalog
post 1.11.2013, 01:50:51
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Z Twojego opisu nie wiadomo w ogóle co ma baza danych do tego.

Co do funkcji, to ja bym zrobił tak:
  1. Pozamieniał polskie znaki na ich łacińskie odpowiedniki:
    1. $replace = array(
    2. 'ą' => 'a',
    3. 'ć' => 'c',
    4. 'ę' => 'e',
    5. // itd.
    6. );
  2. Wszystko, co nadal nie jest literą, cyfrą lub myślnikiem zamienił na myślnik:
    1. $result = preg_replace('#[^a-zA-Z0-9-]#', '-', $result);
  3. Usunął myślniki z początku i końca oraz zamienił wszystkie wielokrotne myślniki na pojedynczy myślnik:
    1. $result = preg_replace('#-+#', '-', trim($result, '-'));
Go to the top of the page
+Quote Post
Turson
post 1.11.2013, 11:24:38
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  1. $link = strtolower($link);
  2. $polskie = array(',', ' - ',' ','ę', 'Ę', 'ó', 'Ó', 'Ą', 'ą', 'Ś', 's', 'ł', 'Ł', 'ż', 'Ż', 'Ź', 'ź', 'ć', 'Ć', 'ń', 'Ń','-',"'","/","?", '"', ":", 'ś', '!','.', '&', '&', '#', ';', '[',']','domena.pl', '(', ')', '`', '%', '?', '?', '?');
  3. $miedzyn = array('-','-','-','e', 'e', 'o', 'o', 'a', 'a', 's', 's', 'l', 'l', 'z', 'z', 'z', 'z', 'c', 'c', 'n', 'n','-',"","","","","",'s','','', '', '', '', '', '', '', '', '', '', '', '', '');
  4. $link = str_replace($polskie, $miedzyn, $link);


Ten post edytował Turson 1.11.2013, 11:24:51
Go to the top of the page
+Quote Post
Crozin
post 1.11.2013, 11:45:51
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Wszystkie powyższe rozwiązania są bardzo słabe - ograniczają się do języka polskiego, a przecież nieraz korzysta się z znaków z innych alfabetów. Wyszukaj sobie w Google'u frazy "php slugify" bądź "php slugify", powinieneś znaleźć kilka stron z uniwersalnymi rozwiązaniami dla całej palety Unikodu.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:18