Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zamiana polskich znaków
Forum PHP.pl > Forum > Przedszkole
Levi3r
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
Damonsson
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. ?>
SmokAnalog
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, '-'));
Turson
  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);
Crozin
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.
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-2025 Invision Power Services, Inc.