Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
O autorach ....................................................................................................... 27
Przedmowa ...................................................................................................... 29
Spis treci
10
Spis treci
11
12
Spis treci
13
14
Spis treci
15
16
Spis treci
17
18
Spis treci
19
20
Spis treci
21
22
Spis treci
23
24
Spis treci
25
Rozdzia 8.
Cigi
W tym rozdziale:
Cigi w PHP
Mimo e rysunki, dwiki, animacje i aplety staj si coraz waniejsz czci sieci WWW,
nadal bazuje ona na tekcie. Podstawowym typem PHP przechowujcym tekst jest typ
string.
W niniejszym rozdziale opisane zostan niemal wszystkie dostpne w PHP narzdzia do
manipulowania cigami (jedynie bardziej zaawansowane funkcje operujce na cigach
oraz dopasowywanie cigw za pomoc wyrae regularnych zostanie opisane pniej,
w rozdziale 22.). Na pocztku przedstawimy podstawowe informacje o cigach, a nastpnie zaprezentujemy ich dziaanie w praktyce, kontynuujc rozbudow kalkulatora do wicze z rozdziau 7.
Cigi w PHP
Cigi to sekwencje znakw traktowane jako odrbna jednostka. Mog by przypisywane do zmiennych, uywane jako parametry funkcji, zwracane z funkcji lub wysyane na
wyjcie i ogldane w przegldarce klienta. Najprostsz metod stworzenia cigu w PHP
jest otoczenie znakw cudzysowami (") bd apostrofami ('):
$ciag = 'Cig';
$inny_ciag = "Inny cig";
180
Cz I Podstawy PHP
$wyrazenie = 'wszystko, co powiem';
$pytanie_1 =
"Czy musisz bra $wyrazenie dosownie?\n<BR>";
$pytanie_2 =
'Czy musisz bra $wyrazenie dosownie?\n<BR>';
echo $pytanie_1;
echo $pytanie_2;
// le
// le
// le
W tym przypadku programista nie osignie podanego efektu, poniewa PHP zinterpretuje sowo $sport1 jako cz nazwy zmiennej $sport1ball, ktra najprawdopodobniej
bdzie nieokrelona. Zamiast takiego zapisu naleaoby zatem napisa:
$plan1 = "W lecie bd gra w {$sport1}ball";
// Dobrze
Rozdzia 8. Cigi
181
Dziki takiemu zapisowi PHP najpierw obliczy warto zmiennej znajdujcej si w nawiasach klamrowych, a dopiero potem doczy j do cigu.
Z analogicznych powodw PHP nie radzi sobie z doczaniem wyrae zawierajcych
zmienne zoone, takie jak tablice wielowymiarowe czy obiekty. Rwnie wwczas konieczne jest uycie nawiasw klamrowych. Oglna zasada stanowi, e jeeli zaraz za znakiem { wystpuje znak $, PHP najpierw obliczy warto wyraenia cigncego si a do
znaku }, po czym obliczony wynik doczy do cigu. (Jeeli chcesz, by w cigu pojawi
si sam symbol {$, musisz w tym celu obydwa znaki poprzedzi znakiem lewego ukonika).
Inne sposoby radzenia sobie z takimi sytuacjami zostan opisane w punkcie Zczenie
i przypisanie w dalszej czci niniejszego rozdziau.
daje w efekcie:
PPooddwwoojjoonnyy
Kada litera zostaa wypisana dwa razy (liczba 9 wpisana jest w tym przykadzie dlatego,
e nie wiemy jeszcze, jak okreli dugo cigu popatrz na opis funkcji strlen()
w czci Sprawdzanie cigw).
We wczeniejszych wersjach PHP mona byo, zalenie od wasnego uznania, umieszcza
odpowiedni indeks w nawiasach kwadratowych i w taki sposb odczytywa pojedyncze
znaki cigu (np. $ciag[3] zamiast $ciag{3}). Wprawdzie cay czas mona uywa zapisu
z nawiasami kwadratowymi (takiego samego jak w przypadku tablic), lecz mechanizm
ten zosta ju uniewaniony i rekomendowane jest uywanie do tego celu nawiasw
klamrowych.
182
Cz I Podstawy PHP
$zdanie_1 = "Chciabym podzieli si z wami ";
$zdanie_2 = "moimi uwagami";
print ($zdanie_1. $zdanie_2. "...");
da w efekcie:
Chciabym podzieli si z wami moimi uwagami...
Zauwamy, e nie przekazujemy do instrukcji print wielu argumentw przekazujemy jeden argument stworzony przez poczenie trzech cigw. Pierwszy i drugi cig
to zmienne, trzeci jest literaem.
Operator zczenia nie jest tym samym co operator + w jzyku Java, nie przecia
innego operatora. Jeeli pomylisz si i dodasz dwa cigi za pomoc +, zostan
zinterpretowane jako liczby. Na przykad jeden + dwa bdzie rwne 0 (poniewa nie
udao si przeprowadzi prawidowej konwersji cigw).
Zczenie i przypisanie
Podobnie jak w przypadku operatorw arytmetycznych, PHP posiada operator skrcony (.=), ktry jest zczeniem z przypisaniem. Wyraenie:
$ciag .= $dodatek;
jest rwnoznaczne z:
$ciag = $ciag . $dodatek;
Zwr uwag, e w odrnieniu od naprzemiennego w swej naturze dodawania i mnoenia, przy uyciu tego operatora nowy cig jest dodawany po prawej stronie starego.
Jeeli chcesz zmieni kolejno, musisz uy duszej formy:
$ciag = $dodatek . $ciag;
Skadnia heredoc
Oprcz skadni z apostrofami i cudzysowami PHP udostpnia rwnie dodatkow metod definiowania wartoci cigw jest to tak zwana skadnia heredoc. Skadnia ta
okazuje si szczeglnie przydatna w sytuacji, gdy trzeba zdefiniowa obszerne fragmenty
tekstu zawierajce w sobie wartoci zmiennych, poniewa programista nie musi w jej przypadku poprzedza apostrofw ani cudzysoww znakiem ukonika. Skadnia ta przydaje
si przede wszystkim do tworzenia stron zawierajcych formularze HTML.
W skadni heredoc operatorem jest <<<. Zaraz po nim powinna nastpi etykieta (bez
cudzysoww ani apostrofw) wskazujca rozpoczcie cigu zoonego z wielu wierszy.
PHP bdzie docza do cigu kolejne wiersze a do czasu, gdy w nowym wierszu napotka t sam etykiet. Opcjonalnie etykieta zamykajca moe posiada na kocu znak
rednika.
Rozdzia 8. Cigi
183
Zwr uwag, e zamykajca etykieta EOT nie moe by w jakikolwiek sposb wcita,
poniewa zostanie wwczas potraktowana jak jeszcze jeden fragment, ktry powinien zosta doczony do cigu. Etykieta nie musi mie postaci EOT moe to by dowolna nazwa zgodna z reguami nazewnictwa zmiennych w PHP.
Doczanie zmiennych realizowane jest w sposb identyczny, jak w cigach otoczonych
cudzysowami. Zalet skadni heredoc jest natomiast fakt, e znaki apostrofw i cudzysoww mog by doczane bez poprzedzania ich znakiem ukonika i bez koniecznoci
wczeniejszego zakaczania cigu. Spjrzmy na kolejny przykad:
echo <<<ENDOFFORM
<FORM METHOD=POST ACTION="{$_ENV['PHP_SELF']}">
<INPUT TYPE=TEXT NAME=FIRSTNAME VALUE=$firstname>
<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=SUBMIT>
</FORM>
ENDOFFORM
Powyszy kod w bardzo prosty sposb zwrci do przegldarki kod definiujcy najprostszy formularz.
184
Cz I Podstawy PHP
Sprawdzanie cigw
Jakie pytania mona zada na temat cigu? Na pocztek sprawdmy przy uyciu funkcji
strlen(), ile znakw zawiera.
$ciag = "Ten cig zawiera 26 znakw";
print("To ma". strlen($ciag)."znakw");
Odczytanie dugoci cigu jest uyteczne w sytuacjach, gdy chcemy za pomoc ptli
dosta si do wszystkich znakw cigu. Bezuytecznym, ale pouczajcym przykadem
moe by (uywamy cigu z poprzedniego przykadu):
for ($index=0; $index <strlen ($ciag); $index++)
print("$ciag[$index]");
Pozycja litery 'q' pozostaa niewypeniona, poniewa funkcja strpos() zwraca FALSE
w przypadku nieznalezienia znaku, a FALSE zostao skonwertowane do pustego cigu.
Naley zwrci uwag, e funkcja strpos() odrnia due i mae litery.
Funkcja strpos() jest jednym z przykadw, kiedy brak cisego okrelenia typw moe
stanowi problem. Jeeli nie zostanie odnaleziona warto, funkcja zwraca warto
FALSE. Jeeli odnaleziony zostanie pierwszy znak cigu, funkcja zwrci zero (poniewa
indeksowanie rozpoczyna si od zera). Jeeli uyjemy tych wartoci w wyraeniu
logicznym, obie zostan zinterpretowane jako FALSE. Jedynym sposobem rozrnienia
tych wartoci jest uycie operatora sprawdzajcego identyczno obiektw (===,
wprowadzony w PHP4), ktry jest prawdziwy, jeeli jego argumenty s identyczne i maj
te same typy. Moesz go bezpiecznie uy do porwnania 0 z FALSE. Jeeli uywasz PHP3,
musisz sprawdzi typ zwracanej wartoci, uywajc funkcji np. is_ integer().
Za pomoc funkcji strpos() mona rwnie szuka cigw, nie tylko pojedynczych znakw. W tym celu wystarczy jedynie przekaza do niej cig wieloznakowy. Moesz take poda dodatkowy parametr numeryczny okrelajcy pozycj, od ktrej funkcja ma
rozpocz szukanie.
Rozdzia 8. Cigi
185
Taka operacja jest jednak nieudokumentowana i nie wystpuje nigdzie w podrczniku, chocia analogiczne odczytywanie znakw jest zamieszczone (i uaktualnione o mechanizm nawiasw klamrowych). Prawie wszystkie funkcje PHP operujce na cigach zwracaj zmienion kopi cigu, a nie
przeprowadzaj zmian na oryginale. Projektanci PHP preferuj ten styl programowania. Radzimy nie
modyfikowa bezporednio cigw, chyba e dziki temu oszczdza si pami.
Moliwe jest te szukanie wstecz przy uyciu funkcji strrpos() (dodatkowe r pochodzi
od sowa reverse, czyli w ty). Funkcja ta pobiera cig do szukania oraz pojedynczy
znak, ktrego szukamy, i zwraca ostatni pozycj, na ktrej w pierwszym argumencie
wystpuje argument drugi. W przeciwiestwie do strpos(), nie mona poda podcigu do
odszukania. Jeeli uyjemy tej funkcji w naszym przykadowym zdaniu, odszukamy inne wystpienie litery k.:
$twister = "Krl Karol kupi krlowej Karolinie";
print("'k' wystpuje na pozycji ". strrpos($twister, 'k'). "<BR>");
Porwnywanie i przeszukiwanie
Czsto trzeba sprawdza, czy dwa cigi s identyczne. Szczeglnie czsto w programach
pracujcych na danych wprowadzonych przez uytkownika.
Cigi s takie same dla operatora '==', jeeli zawieraj dokadnie tak sam sekwencj
znakw. Operator ten nie wykonuje adnych dokadniejszych porwna (np. sprawdzenia
obszarw pamici), zwraca natomiast baczn uwag na wielko liter.
Najprostsz metod porwnania cigw jest zastosowanie operatora rwnoci (==), ktry
porwnuje zarwno liczby, jak i cigi.
186
Cz I Podstawy PHP
Porwnanie cigw za pomoc operatora '==' (a take < i >) jest prawidowe tylko
w przypadku, gdy oba argumenty s takimi samymi cigami i nie wykonano adnej
konwersji typw (wicej na ten temat w rozdziale 5.). Jedynie uywajc funkcji strcmp()
(opisanej poniej), otrzymujemy zawsze prawidowe wyniki.
Podstawow funkcj do porwnywania cigw jest strcmp(). Posiada dwa cigi jako
argumenty, porwnuje je znak po znaku a do znalezienia rnicy. Funkcja zwraca warto ujemn, jeeli pierwszy cig jest mniejszy od drugiego, warto dodatni, gdy drugi
cig jest mniejszy, oraz 0, jeeli cigi s identyczne.
Funkcja strcasecmp() dziaa w taki sam sposb, z t rnic, e nie bierze pod uwag
wielkoci liter podczas porwnywania cigw. Wywoanie funkcji: strcasecmp("hej!",
"HEJ!") powinno zwrci 0.
Przeszukiwanie
Funkcje porwnujce cigi sprawdzaj, czy cigi s identyczne. Aby sprawdzi, czy jeden
cig zawiera si w drugim, uywamy funkcji strpos() (opiszemy j pniej) lub strstr()
(ewentualnie jednej z jej odmian).
Funkcja strstr() oczekuje w pierwszym parametrze cigu do przeszukania, a w drugim
cigu do odszukania. Jeeli operacja si powiedzie, funkcja zwrci fragment przeszukiwanego cigu rozpoczynajcy si od pierwszego miejsca wystpienia poszukiwanego
fragmentu. Jeeli nic nie zostanie odnalezione, zwracana jest warto FALSE. W poniszym przykadzie zamiecilimy jedno udane i jedno nieudane wywoanie funkcji.
$ciag_do_przeszukania = "pierwszaoladrugaola";
$ciag_do_odszukania = "ola";
print("Wynik szukania cigu $ciag_do_odszukania: " .
strstr($ciag_do_przeszukania, $ciag_do_odszukania) . "<br>");
$ciag_do_odszukania = "ula";
print("Wynik szukania cigu $ciag_do_odszukania: " .
strstr($ciag_do_przeszukania, $ciag_do_odszukania));
Puste miejsce za dwukropkiem w drugim wierszu wyniku jest wynikiem prby wydrukowania wartoci FALSE, ktra zostaa skonwertowana na pusty cig. Funkcja strstr()
posiada alternatywn nazw strchr(). Mona uywa dowolnej z nazw tej funkcji, wynik
dziaania bdzie identyczny. Podobnie jak strcmp(), strstr() posiada odmian, ktra
przy szukaniu cigw identycznie traktuje mae i wielkie litery stristr(). Funkcja ta
dziaa identycznie jak strstr(), nie rozrnia jednak wielkoci liter. Dotychczas opisane
funkcje operujce na cigach zebralimy w tabeli 8.1.
Rozdzia 8. Cigi
187
Opis
strlen()
Zwraca dugo cigu podanego jako argument wywoania i zwraca j w postaci liczby
cakowitej.
strpos()
strrpos()
Jak strpos(), ale przeszukuje cig od tyu. Poszukiwany cig moe skada si tylko
z jednej litery. Nie ma opcjonalnych argumentw.
strcmp()
strcasecmp()
strstr()
strchr()
stristr()
Wycinanie podcigu
Wiele z funkcji operujcych na cigach ma na celu wybranie okrelonego podcigu lub
modyfikacj go w cigu oryginalnym. Warto wiedzie, e wikszo funkcji modyfikujcych cig nie zmienia oryginalnego cigu, ale zwraca zmienion kopi, pozostawiajc
orygina nietknity.
Podstawow metod wycicia fragmentu cigu jest uycie funkcji substr(), ktra zwraca
cig bdcy okrelonym fragmentem cigu przekazanego jako argument. Oprcz cigu,
na ktrym operuje, funkcja wymaga podania liczby okrelajcej pocztek wycinanego
cigu. Trzeci argument jest opcjonalny i okrela dugo wynikowego podcigu. Jeeli nie
zostanie on podany, funkcja zwraca fragment od podanej pozycji (za pomoc drugiego
argumentu) do koca cigu. Naley pamita, e pierwszy znak cigu znajduje si na
pozycji 0.
Spjrzmy na nastpujcy przykad:
echo (substr("Wycinanie cigw w PHP jest proste", 23));
188
Cz I Podstawy PHP
Oba argumenty numeryczne, pozycja pocztkowa i dugo mog by ujemne, lecz w obydwu przypadkach znaczenie ujemnego argumentu jest inne. Jeeli pozycja pocztkowa
jest ujemna, oznacza to, e pocztek podcigu jest okrelany wzgldem koca cigu. Pozycja 1 oznacza pocztek cigu na ostatnim znaku, 2 na przedostatnim itd.
Mona oczekiwa, e podanie ujemnej dugoci zinterpretowane bdzie analogicznie do
pozycji pocztkowej i podcig bdzie wyznaczany, odliczajc wstecz od pocztkowego
znaku cigu. Nie jest to do koca prawdziwe. Znak okrelony przez indeks pocztkowy
bdzie pierwszym znakiem podcigu (a nie ostatnim), a jego dugo okrelona bdzie odliczeniem podanej liczby znakw od koca cigu.
Spjrz na kilka przykadw, w ktrych uyte zostay dodatnie i ujemne wartoci:
$alfabet = "abcdefghijklmnop";
print ("3: ". substr( $alfabet, 3). "<BR>");
print ("-3: ". substr( $alfabet, -3). "<BR>");
print ("3,5: ". substr( $alfabet, 3, 5). "<BR>");
print ("3,-5: ". substr( $alfabet, 3, -5). "<BR>");
print ("-3,-5: ". substr( $alfabet, -3, -5). "<BR>");
print ("-3, 5: ". substr( $alfabet, -3, 5). "<BR>");
W wyniku otrzymujemy:
3: defghijklmnop
-3: nop
3,5: defgh
3,-5: defghijk
-3,-5:
-3, 5: nop
Zauwamy, e pomidzy funkcjami substr(), strstr() i strpos() wystpuje bliski zwizek. Funkcja substr() wycina podcig, bazujc na pozycji, strstr() wycina podcig na
podstawie zawartoci, a strpos() znajduje pooenie podcigu. Jeeli jestemy pewni, e
$ciag zawiera $podciag, wtedy wyraenie:
strstr($ciag, $podciag)
Funkcje porzdkujce
Mimo e funkcje chop(), ltrim() i trim() s zwykymi funkcjami wycinajcymi podcig, uywa si ich do porzdkowania cigw. Funkcje te wycinaj znaki odstpw z pocztku, koca lub pocztku i koca cigu. A oto przykad:
Rozdzia 8. Cigi
189
W przegldarce dostajemy:
Cig oryginalny: ' To przechodzi ludzkie pojcie '
Dugo cigu: 33
Po funkcji chop: ' To przechodzi ludzkie pojcie'
Dugo cigu: 30
Po funkcji ltrim: 'To przechodzi ludzkie pojcie '
Dugo cigu: 32
Po funkcji trim: 'To przechodzi ludzkie pojcie'
Dugo cigu: 29
Cig oryginalny ma trzy spacje na kocu (usuwane przez chop() i trim()) oraz jedn na
pocztku (usuwana przez ltrim() i trim()). Dokadniej opiszemy zawarto okna przegldarki po wykonaniu tego fragmentu. Powtarzajce si odstpy zostay przez przegldark poczone w jeden. Jeeli jednak zajrzysz do rda strony, to na kocu cigu nadal
znajduj si trzy odstpy.
Oprcz spacji funkcje te usuwaj znaki zapisane jako sekwencje sterujce \n, \r, \t oraz \0
(znaki koca wiersza, tabulatory oraz znak koca cigu uywany w programach napisanych w C).
Gdyby nazewnictwo funkcji byo spjne, funkcja chop() powinna nazywa si rtrim().
Mimo e nazwa funkcji chop() (ang. rba) sugeruje destrukcyjne dziaanie, nie wpywa
ona na cig przekazany jako argument. Po wykonaniu funkcji cig nie zmienia si.
Zastpowanie cigw
Funkcje operujce na cigach, ktre omwilimy do tej pory, zwracay fragment cigu
przekazanego jako argument, zamiast tworzy cakowicie nowy cig. Teraz zajmiemy si
funkcjami str_replace() i substr_replace().
Funkcja str_replace() pozwala zamieni wszystkie miejsca wystpienia podanego fragmentu cigu na inny. Funkcja oczekuje trzech argumentw: cigu do odszukania, cigu,
ktry zamieni szukany fragment, oraz cigu rdowego. Na przykad:
$pierwszy = "Birma jest nieco podobna do Rodezji.";
$drugi = str_replace("Rodezji", "Zimbabwe", $pierwszy);
$trzeci = str_replace("Birma", "Panama", $drugi);
print($trzeci);
190
Cz I Podstawy PHP
wywietli cig:
Wynik zamiany to 'DEF jest czci DEFBA'
daje w wyniku:
AB-FG
Fragment CDE zosta zamieniony na pojedynczy znak minus. Moemy wic zastpowa
fragmenty cigu cigami o innej dugoci. Jeeli nie zostanie podana dugo fragmentu,
wymieniony zostanie fragment cigu od pozycji startowej do koca cigu.
Funkcja substr_replace() pozwala rwnie na uywanie ujemnych wartoci argumentw
numerycznych. S one traktowane identycznie jak ujemne wartoci argumentw w funkcji
substr(); opisalimy je w czci Wycinanie podcigu. Naley pamita, e funkcje
str_replace() i substr_replace() nie zmieniaj w aden sposb oryginalnych cigw.
Mamy rwnie kilka rzadziej uywanych funkcji, ktre tworz nowy cig na podstawie
podanego jako parametr. Funkcja strrev() zwraca cig podany jako argument, ale pisany
wspak. Funkcja str_repeat() tworzy cig zawierajcy cig rdowy powtrzony dan
liczb razy. Przykadowo:
print(str_repeat("witaj ", 3));
daje w wyniku:
witaj witaj witaj
Rozdzia 8. Cigi
191
Dziaanie
substr()
Zwraca fragment cigu opisany przez drugi argument okrelajcy pozycj pocztkow
i opcjonalny trzeci argument okrelajcy dugo. Fragment rozpoczyna si na pozycji
startowej i ma dugo podan w trzecim argumencie, a jeeli nie zosta podany trzeci
argument, obejmuje cig do koca.
Ujemna warto pozycji startowej oznacza, e jest okrelana od koca cigu, ujemny
parametr okrelajcy dugo powoduje, e koniec podcigu jest wyznaczany przez
podan liczb znakw od koca cigu.
Zwraca cig podany jako argument bez kocowych znakw odstpu. Znakami odstpu
s znaki " ", \n, \r, \t i \0.
ltrim()
trim()
Zwraca cig podany jako argument bez pocztkowych i kocowych znakw odstpu.
str_replace()
Zamienia podany fragment cigu na inny. Funkcja ma trzy argumenty: cig do odszukania,
cig, na ktry jest on zamieniany, oraz cig bazowy. Zwraca kopi z zamienionymi
na drugi argument wszystkimi miejscami wystpienia pierwszego argumentu.
substr_replace()
strtolower()
Funkcja strtolower() zwraca cig ze wszystkimi maymi literami. Nie ma znaczenia, czy
na pocztku cay cig by zapisany duymi literami, czy due i mae litery byy wymieszane.
<?php
$oryginalny = "On NIE wiE, e KRZYCZY";
$male = strtolower($oryginalny);
echo $male;
?>
192
Cz I Podstawy PHP
strtoupper()
Funkcja strtoupper() zwraca cig z wszystkimi duymi literami. Nie ma znaczenia, czy
na pocztku cay cig by zapisany maymi literami, czy due i mae litery byy wymieszane.
<?php
$oryginalny = "napisz to wyranie";
echo("<B>".strtoupper($oryginalny)."</B>");
?>
ucfirst()
Funkcja ucfirst() zmienia pierwsz liter cigu na du.
<?php
$oryginalny = "przykadowe zdanie.";
echo(ucfirst($oryginalny));
?>
ucwords()
Funkcja ucwords() zamienia pierwsze litery wyrazw w cigu na due.
<?php
$oryginalny = "miasto nowy jork";
echo( ucwords($oryginalny));
?>
Zarwno ucwords(), jak i ucfirst() nie konwertuj liter na mae. Zmieniaj tylko
waciwe pocztkowe litery na due. Jeeli w rodku cigu wystpi due litery,
nie zostan zamienione.
Rozdzia 8. Cigi
193
<?php
$escapedstring = addslashes("Po angielsku zdanie - 'I'm a dog.' znaczy 'Jestem psem.'");
$query = "INSERT INTO test (quote) values ('$escapedstring')";
$result = mysql_query($query) or die(mysql_error());
?>
Dziki temu serwer SQL nie potraktuje apostrofu przed "I" jak zakoczenia wyraenia.
Jeeli odczytujesz dane z bazy, musisz uy funkcji stripslashes(), aby usun znaki
sterujce.
<?php
$query = "SELECT quote FROM test WHERE ID = 1";
$result = mysql_query($query) or die (mysql_error());
$new_row = mysql_fetch_array($result);
$quote = stripslashes($new_row[0]);
echo $quote;
?>
Formatowanie danych
Podstawowymi konstrukcjami uywanymi do drukowania danych s print i echo, ktre
zostay opisane w rozdziale 5. Zwykle wartoci zmiennych s wypisywane poprzez wbudowywanie zmiennych w cigi otoczone cudzysowami (i s zamieniane na wartoci)
i przekazywanie takiego cigu do instrukcji echo lub print.
Jeeli potrzebujesz dokadniej sformatowanego tekstu, PHP udostpnia funkcje printf()
i sprintf(), ktre dziaaj analogiczne do funkcji o tych samych nazwach w C. Obie
funkcje maj takie same argumenty: specjalny cig formatujcy (opisany poniej), a nastpnie dowoln liczb argumentw, ktre zostan wklejone we waciwe miejsca cigu
formatujcego.
Jedyn rnic pomidzy printf() i sprintf() jest to, e printf() wysya wynik bezporednio na wyjcie, a sprintf() zwraca wynik jako cig.
Dla programistw C: funkcja sprintf() rni si od jej wersji z C jeszcze jednym
szczegem. W C naley utworzy cig wynikowy, PHP sam utworzy ten cig.
194
Cz I Podstawy PHP
Najbardziej skomplikowan czci tych funkcji jest cig formatujcy. Kady znak, jaki
umiecisz w tym cigu, pojawi si w cigu wynikowym, oprcz sekwencji znakw rozpoczynajcych si od %. Znak % oznacza pocztek specyfikacji konwersji, ktra wskazuje sposb wydruku argumentu odpowiadajcego tej specyfikacji.
Po znaku % mona umieci pi elementw okrelajcych sposb konwersji (niektre
opcjonalnie): wypenienie, wyrwnanie, minimalna szeroko, dokadno oraz typ.
Pojedynczy (opcjonalny) znak wypenienia moe by zerem lub spacj. Znak ten jest
uywany do wypeniania nieuywanego miejsca, ktre zarezerwowano, okrelajc
minimaln szeroko. Jeeli znak ten nie zostanie podany, wolne miejsce zostanie
wypenione spacjami.
Konstrukcja <pre></pre> w HTML wskazuje przegldarce, aby nie formatowaa tak oznaczonego bloku (nie usuwaa wielokrotnych odstpw itp.).
Rozdzia 8. Cigi
195
196
Cz I Podstawy PHP
}
// Utworzenie strony
// ----------------$page_str = <<< EOPAGE
<HTML>
<HEAD>
<STYLE TYPE="text/css">
Rozdzia 8. Cigi
<!-BODY, P
H1
-->
</STYLE>
</HEAD>
197
<BODY>
<TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
<TR>
<TD BGCOLOR="#F0F8FF" ALIGN=CENTER VALIGN=TOP WIDTH=150>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN=LEFT VALIGN=TOP WIDTH=83%>
<H1>Obsuga kalkulatora do wicze - cz 2</H1>
<P>Kalkulator informuje: "$message"</P>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
EOPAGE;
echo $page_str;
?>
198
Cz I Podstawy PHP
Rysunek 8.1.
Formularz
pocztkowy
Rysunek 8.2.
Odpowied
Podsumowanie
Cigi s sekwencjami znakw. Jest to jeden z szeciu podstawowych typw danych w PHP.
W przeciwiestwie do niektrych innych jzykw, nie ma tu osobnego typu znakowego, pojedynczy znak zachowuje si jak cig o dugoci 1. Cigi w kodzie s otaczane
apostrofami (') lub cudzysowami ("). Cigi otoczone apostrofami s interpretowane prawie dosownie, a cigi otoczone cudzysowami interpretuj kilka sekwencji sterujcych
i automatycznie wstawiaj wartoci zmiennych.
Podstawowym operatorem cigw jest '.', ktry czy dwa cigi. Istnieje dodatkowo spora gama funkcji, ktre umoliwiaj sprawdzanie, porwnywanie, szukanie, wycinanie,
zamian zawartoci cigu. PHP udostpnia take wyraenia regularne, zgodne ze standardem POSIX i Perl (i opisane w rozdziale 22.), do zaawansowanych zastosowa.