PHP/Przetwarzanie tekstu: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
→‎ASCII: Dodanie zakończenia </p>
Linia 59:
Nagłówki na stronach internetowych przybierają różne style, w zależności od pełnionych funkcji. Część z nich pisana jest kapitalikami, w innych z dużych liter zaczyna się każdy wyraz. Wcale nie musimy zmuszać redaktorów, by to oni zajmowali się wprowadzaniem tytułów w wymaganej postaci. Istnieją odpowiednie algorytmy, które wykonają to za nich. Choć obecnie zadanie sformatowania tytułów można z powodzeniem zrealizować już z wykorzystaniem CSS-a, PHP posiada szereg funkcji do konwersji dużych liter na małe. Pamiętajmy wszak, że PHP to nie tylko strony internetowe.
 
<nowikisource lang="php"><?php
$tekst = 'php jest językiem programowania skryptowego zaprojektowanego dla stron internetowych';
Linia 66:
echo '<p>Dużą literą: '.ucfirst($tekst).'</p>';
echo '<p>Każdy wyraz dużymi literami: '.ucwords($tekst).'</p>';
?></nowikisource>
 
Mamy tutaj tekst zapisany w zmiennej (symulującej jakieś źródło danych, ponadto wykorzystamy go kilkakrotnie, stąd ta zmienna) złożony z samych małych liter. Za pomocą funkcji ''strtoupper()'' zamieniamy je wszystkie na duże. Odwrotną operację wykonuje ''strtolower()''. ''ucfirst()'' zamienia na dużą literę początek pierwszego wyrazu ciągu, a ''ucwords()'' - początek każdego wyrazu. Doświadczenie podpowiada nam, że otrzymywane dane nie zawsze są tak klarowne. Jeżeli potrzebne nam automatyczne kapitalizowanie początków zdań, musimy sami napisać odpowiedni algorytm.
 
Jeżeli chcemy wyciąć fragment jednego ciągu, aby np. poddać go bardziej szczegółowej obróbce, z pomocą przychodzi nam ''substr()''. Podajemy w niej pozycję, od której zamierzamy ciąć oraz (opcjonalnie) ilość znaków do pobrania. Domyślnie funkcja kończy wycinanie na końcu ciągu. W przykładzie połączymy ją z funkcjamifunkcją ''strpos()'' oraz ''strlen()'' (podaje długość ciągu) do wycięcia nazwiska z personaliów pewnego człowieka.
 
<nowikisource lang="php"><?php
$nazwa = 'Janusz Kowalski';
Linia 78:
if(($id = strpos($nazwa, ' ')) !== false)
{
$nazwisko = substr($nazwa, $id + 1); // +1, by zacząć wycinanie od jednego miejsca za znalezioną spacją
}
else
Linia 87:
echo $nazwisko;
?></nowikisource>
 
W personaliach odnajdujemy spację, która posłuży nam jako marker. ''strpos()'' zwróci nam jej pozycję. Przekazujemy ją do ''substr()'' jako punkt startowy wycinania i pobieramy ilość znaków równą długości personaliów minus pozycji spacji. W ten sposób w nasze ręce wpadnie nazwisko i będziemy mogli zrobić z nim, co tylko chcemy. Alternatywny sposób rozwiązania tego problemu polega na rozbiciu tego ciągu na tablicę poznaną już funkcją ''explode()''. Przydaje się on, kiedy oprócz nazwiska pragniemy otrzymać także drugi ciąg z imieniem - tu pasuje ona, jak znalazł.
Linia 93:
Teraz coś bardziej praktycznego. Na wielu witrynach internetowych można spotkać emotikonki zamieniane na obrazki. Jeżeli nie interesują nas żadne dodatkowe fajerwerki, napisanie konwertera jest bajecznie proste. PHP posiada funkcję ''str_replace()'' zamieniającą jeden fragment ciągu na drugi (jej wariant, ''str_ireplace()'' nie rozróżnia wielkości liter).
 
<nowikisource lang="php"><?php
$post = 'Tak, zaiste jesteś bardzo zdolny :). Jeszcze nad praktyką popracuj :].';
Linia 113:
), $post);
?></nowikisource>
 
Pierwszym parametrem jest szukany ciąg, drugim - ciąg docelowy, a trzecim - ciąg, na którym operujemy. Możemy zdefiniować tylko jeden wzorzec do podmiany albo całą grupę, którą podajemy w postaci tablic, jak na przykładzie. Zwróć uwagę, że w przeciwieństwie do omawianego wcześniej ''substr()'', tutaj ciąg, na którym operujemy, wskazywany jest dopiero na końcu.
Linia 121:
Zajmując się księgą gości, dbaliśmy, aby do naszych wpisów nie przedostał się HTML. Funkcja ''htmlspecialchars()'' zamieniała wtedy znaki specjalne HTML-a na encje, przez co nie mogły być one przetworzone i pojawiały się we wpisie jako statyczny tekst. Okazuje się, że nie jest to jedyne dostępne nam rozwiązanie. Możemy znaczniki wyrzucić całkowicie. Różne warianty prezentuje poniższy przykład:
 
<nowikisource lang="php"><?php
$post = ' To jest post
Linia 135:
echo '<p>'.nl2br(strip_tags(trim($post))).'</p>';
?></nowikisource>
 
Zarówno ''strip_tags()'', jak i ''trim()'' mają pewne ciekawe dodatkowe parametry, o których nie wszyscy wiedzą. Przy wycinaniu znaczników możemy określić, które z nich mają być zostawiane, np. ''strip_tags($tekst, '<nowiki><b><i><u><a></nowiki>')'' pozostawi nam pogrubianie, kursywę, podkreślanie oraz linki. ''trim()'' natomiast niekoniecznie musi wycinać białe znaki - wystarczy, że podamy nasz własny zestaw jako drugi parametr, a możemy oszczędzić sobie dużo pracy.