[PHP] wyrażenia regularne - banalny problem

0

witam,
potrzebuje funkcje w php która wykona kilka operacji na łańcuchu znaków:
-zamiana wszystkiego na małe litery
-zamiana polskich znaków na znaki bez ogonków
-zamiana spacji na myślniki
-usunięcie z łańcucha innych znaków niż liczby i litery alfabetu (czyli wszystkie ? ! # $ % itp. wylatują)

łańcuch po ptrzerobieniu przez tą funkcę trafi do URLa, więc już wiecie jak to powinno chodzić,

kiepsko znam php, a wyrażenia regularne to już czrna magia dla mnie, wiec bedę bardzo wdzięczny za każdą pomoc!

0

strtolower
napisz sobie sam
str_replace
preg_replace('/\W/','','ciąg')

A do url nie lepiej zakodować te znaki przez (raw)urlencode ?

0

-zamiana polskich znaków na znaki bez ogonków

$pl = array('ą','ć','ę'); 
$alpha = array('a','c','e');
$str = str_replace($pl,$alpha,$str);
0

Z treści postu wynika, że Mizantrop chce generować przyjazne URLe bez znaków, które trzeba będzie zamieniać na procenty, tak jak to jest na przykład na polskim Joggerze (i angielskim chyba też), za wskazówką W3C dotyczącą wybierania adresów URI.

   $title = str_replace(
      array(
         'Ą', 'ą', 'Ę' // bla bla bla
      ),
      array(
         'a', 'a', 'e' // bla bla bla
      ),
      $title
   );
   // na małe litery
   $title = strtolower($title);
   // spacje na myślniki
   $title = str_replace(' ', '-', $title);
   // pozostałe brzydkie znaki usuwamy
   $title = preg_replace('#[^a-z0-9\-\._]#', '', $title);

Weź pod uwagę sytuację, gdyby na stronie, na której wykorzystujesz tę funkcję znalazłby się artykuł o tytule np. „$$$” (mało prawdopodobne) albo „Но погади!” (możliwe, jeśli stosujesz Unicode). Niby rzadko to się zdarza, ale lepiej się przygotować.

PS. A skoro to taki banalny problem, mogłeś go umieścić w dziale Newbie.

0

nasmarowałem taką funkcję:

function oczysc_string($str)
{
    // na małe litery
    $str = strtolower($str);
    
    // zamiana polskich znaków na znaki bez ogonków
    $pl    = array('ą', 'ć', 'ę', 'ó', 'ł', 'ń', 'ź', 'ż', 'ś');
    $alpha = array('a', 'c', 'e', 'o', 'l', 'n', 'z', 'z', 's');
    $str = str_replace($pl, $alpha, $str);
    
    // spacje na myślniki
    $str = str_replace(' ', '-', $str);
    
    // pozostałe brzydkie znaki usuwamy
    $str = preg_replace('#[^a-z0-9\-\._]#', '', $str);
    
    return $str;
}

działa tak jak chciałem, dziękuję za pomoc

0

Jest jeden mały problem:

ta funkcja nie zamienia znaków: ą ś ź na ich bezogonkowe odpowiedniki.

póżniej jak po stringu przejedzie to:

$str = preg_replace('#[^a-z0-9\-]#', '', $str);

to te znaki wylatują. czy to jakiś błąd str_replace() czy ja gdzieś nawaliłem?

0

preg nie łapie polskich znaków. Musisz je wpisać do klasy znaków jeden po drugim.

0

nav: czytanie jednak ze zrozumieniem :)

jeśli tylko ą, ś, ź to problem kodowania (w sumie jeśli wszystkie to też możliwe że problem kodowania ;P). Plik ze skryptem php po prostu ma być zapisany tym samym kodowaniem co dane które do niego dojdą, ew. zapisz te znaki w $pl we wszystkich kodowaniach które mogą dojść, a tablicę $alpha wydłuż odpowiednio powtarzając elementy
Skoro tylko ą, ś, ź to najprawdopodobniej skrypt masz napisany np w notatniku w Windows-1250 a strona jest - i tym samym dane dochodzą w ISO-8859-2 - albo na odwrót

btw w wyrażeniu nie musisz escape'ować kropki, jak przesuniesz myślnik na koniec nawiasu to jego też nie musisz
i nie wiem czy nie lepiej by było gdyby po nawiasie był jeszcze plusik

1 użytkowników online, w tym zalogowanych: 0, gości: 1