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

Usunięta treść Dodana treść
Zyx (dyskusja | edycje)
Zyx (dyskusja | edycje)
uzup.
Linia 136:
 
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.
 
=== ASCII ===
Kiedy powstawały komputery, powstała konieczność stworzenia uniwersalnego standardu kodowania znaków alfabetu za pomocą kodów liczbowych rozumianych przez maszyny. Umożliwiłoby to pisanie dokumentów, które da się przenosić między maszynami bez konieczności ich konwersji. Tak narodził się siedmiobitowy standard '''ASCII''' zawierający 128 kodów. Jego cechą szczególną było istnienie tzw. kodów sterujących (od 0 do 32), dzięki którym można było nawet sterować pracą niektórych urządzeń. W latach późniejszych wykorzystano także ósmy bit (kody od 128 do 255). Jego wykorzystanie różni się w zależności od wariantu systemu kodowania.
 
PHP udostępnia kilka funkcji ułatwiających pracę z ASCII. Na początku zapoznamy się z funkcjami ''chr()'' oraz ''ord()'' konwertujących kod na odpowiadający mu znak i vice versa. Oto prosty skrypt , wykonujący to zadanie i pobierający dane z formularza HTML.
 
<nowiki><?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{ // 1
if($_POST['kierunek'] == 0) // 2
{
if(strlen($_POST['dane']) != 1)
{
die('<p>Nieprawidłowe dane. Proszę podać JEDEN znak!');
}
echo '<p>Kod znaku <b>'.$_POST['dane'].'</b> to '.ord($_POST['dane']).'</p>';
}
else
{ // 3
if(!ctype_digit($_POST['dane']))
{
die('<p>Nieprawidłowe dane. Proszę podać kod znaku!');
}
echo '<p>Kodowi <b>'.$_POST['dane'].'</b> odpowiada znak '.chr($_POST['dane']).'</p>';
}
}
else
{ // 4
echo '<form method="post" action="ascii.php">
<h2>Informator ASCII</h2>
<select name="kierunek">
<option value="0">Sprawdź kod znaku</option>
<option value="1">Sprawdź znak pod kodem</option>
</select>
<input type="text" name="dane"/>
<input type="submit" value="OK"/>
</form>';
}
?></nowiki>
 
Formularz przesyła nam dwie informacje:
* Kierunek - określa, czy konwertujemy znak na kod, czy też kod na znak.
* Dane - znak albo kod do zamiany.
 
Oto omówienie działania:
# Dotarły do nas dane z formularza.
# Konwersja ze znaku na kod. Sprawdzamy, czy pole ''dane'' zawiera dokładnie jeden znak. Jeśli tak, wyświetlamy wynik.
# Konwersja ze znaku na kod. Funkcją ''ctype_digit()'' sprawdzamy, czy wprowadzony kod składa się wyłącznie z cyfr. Jeśli tak, wyświetlamy wynik.
# Formularz do komunikacji ze skryptem.
 
W powyższym przykładzie wykorzystaliśmy funkcję ''ctype_digit()'', która szybko bada, czy podany ciąg składa się wyłącznie z liczb. Istnieje kilkanaście funkcji z serii ''ctype''. Oto kilka z nich:
* ''ctype_alpha($tekst)'' - sprawdza, czy tekst składa się wyłącznie z liter.
* ''ctype_lower($tekst)'' - sprawdza, czy tekst składa się wyłącznie z małych liter.
* ''ctype_upper($tekst)'' - sprawdza, czy tekst składa się wyłącznie z dużych liter.
* ''ctype_xdigit($tekst)'' - sprawdza, czy tekst zawiera wyłącznie znaki do zapisu liczb w systemie szesnastkowym (heksadecymalnym).
 
Jeśli żądany przez Ciebie zestaw znaków nie jest udostępniany przez żadną z funkcji, możesz skorzystać z odpowiedniego algorytmu:
 
<nowiki><?php
function ctype($ciag, $zestaw)
{
for($i = 0; $i < strlen($ciag); $i++)
{
if(strpos($zestaw[1], $ciag{$i}) === FALSE)
{
return false;
}
}
return true;
} // end ctype();
?></nowiki>
 
Algorytm jest bardzo prosty. Przeszukujemy wprowadzony ciąg znaków ''$ciag'' i sprawdzamy funkcją ''strpos()'', czy każdy jego znak zawiera się w zestawie ''$zestaw''. Jeśli nie, przerywamy pracę i zwracamy '''false'''. Oto przykładowe użycie:
 
echo ctype('555-1234', '0123456789-');
 
Jeżeli poszukujesz jeszcze bardziej złożonych związków między znakami, musisz posłużyć się wyrażeniami regularnymi, z których podstawami zaznajomi Cię następny rozdział.
 
=== Formatowanie tekstu ===
Korzenie PHP znajdują się w języku C, więc nic dziwnego, że dziedziczy on po nim funkcję ''printf()'' służącą do prezentacji sformatowanych danych.
 
<nowiki><?php
printf('Liczba szesnastkowa: %x', 3342);
?></nowiki>
 
Funkcja odnajduje w podanym ciągu specjalne kody formatujące rozpoczynające się od znaku procentu i umieszcza na ich miejscu dane z kolejnych parametrów. W powyższym przykładzie zastosowaliśmy kod ''%x'', który spowoduje wyświetlenie się liczby 3342 w systemie szesnastkowym. Przeglądarka wyświetli zatem:
 
Liczba szesnastkowa: d0e
 
Za pomocą kodów formatujących możemy też np. określić precyzję wyświetlania ułamków. Aby wyświetlić liczbę π do 4 miejsc po przecinku, napiszemy:
 
<nowiki><?php
printf('Liczba PI: %0.4f', M_PI);
?></nowiki>
 
To są jedynie podstawy kodów formatujących. Szczegółowy ich opis znajduje się w dokumentacji PHP. Warto nadmienić także istnienie odmian funkcji ''printf()'', np.
=== HTML i konwersja ===
* ''sprintf()'' - zwraca wynik jako ciąg tekstowy.
* ''vprintf()'' - pobiera dane do kodów z tablicy przekazanej jako drugi parametr.
* ''vsprintf()'' - pobiera dane do kodów z tablicy przekazanej drugim parametrem i zwraca wynik jako ciąg tekstowy.
 
=== Kodowanie ===