İçindekiler
PHP metin işleme konusunda atası Perl kadar marifetli bir dildir. Bilhassa formlardan gelen bilgilerin işlenmesi konusunda çok kullanacağımız 50'den fazla fonksiyona sahiptir.
Bu bölümde temel metin fonksiyonlarına ve bazı düzenli ifadelere değineceğiz. PHP'nin metin işleme fonksiyonlarının tam listesine http://www.php.net/ adresinden ulaşabilirsiniz.
Temel Metin Fonksiyonları
Metinsel (karaktersel, alfanümerik, string) ifadeler üzerinde bir bölümünü alma, atma, değiştirme gibi işlemler yapılabilir. Şimdi örneklerle birlikte bu işlemleri sağlayan temel fonksiyonlara değinelim.
| Fonksiyon tanımlarındaki köşeli parantez " [ ] " içindeki ifadeler seçimlik parametreleri temsil etmektedir. |
substr() Metnin bir bölümünü almak...
Bir string değişkenin değerinin ya da bir metnin tanımladığımız bölümünü verir. İkisi zorunlu, biri seçmeli üç parametre alır. İlk parametre: üzerinde işlem yapılacak metinsel değer içeren değişkeni yada metnin kendisini, ikinci parametre: bu metnin kaçıncı karakterinden
itibaren işlem yapılacağını, üçüncü parametre : başlangıc konumundan itibaren kaç karakter alınacağını ifade eder. Üçüncü parametre seçimliktir ve bildirilmezse başlangıç konumundan itibaren verilen metnin sonuna kadar olan kısmı alınır.
Genel yazım şekli:
| substr($degisken, baslangic_konumu [, alinacak_karakter_sayisi ]); |
Örnek:
<? $cumle="Biz bu Kostarika'yı yeriz :)"; $secilen=substr($cumle,7); // 7.karakterden sonraki tüm bölümü alır print $secilen; // Kostarika'yı yeriz :)
print "<br>";
$secilen=substr($cumle,7,9); // 7.karakterden sonraki 9 karakteri alır. print $secilen; // Kostarika ?> |
Başlangıç değeri olarak negatif bir sayı verirsek seçim işlemine metnin sonundan itibaren başlanır.
Örnek:
<? $cumle="Biz bu Kostarika'yı yeriz :)"; $secilen=substr($cumle,-8); // Sondan 8.karakterden sonraki tüm bölümü alır print $secilen; // yeriz :) ?> |
trim() Metnin baş ve sonundaki boşluklarını kırpmak..
Parametre olarak aldığı metnin baş ve sonundaki boşlukları atar. Bu fonksiyon metnin başındaki yada sonundaki "n", "r", "t","v","v","o" ve aralık işaretlerini de boşluk sayar.
Genel yazım şekli:
Örnek:
<? $cumle=" tBiz bu Kostarika'yı yeriz :) n" $temiz=trim($cumle); // Metnin başındaki boşluklar ve tab karakteri, sonundaki yeni satır karakteri temizlenecektir. ?> |
chr() ASCII'dan karaktere...
Parametre olarak ASCII değeri bildirilen karakteri değer olarak döndürür;
Örnek:
| print chr(45); //Ekrana A yazar |
ord() Karakterden ASCII'ya...
Parametre olarak bildirilen karakterin ASCII karşılığını değer olarak döndürür;
Örnek:
| print ord("A"); //Ekrana 65 yazar |
strlen() Metnin uzunluğu...
Parametre olarak aldığı metnin kaç karakter içerdiğini bildirir.
Genel yazım şekli:
Örnek:
<? if (strlen($parola)>8) //girilen değer 8 karakterden uzun ise { print "Lütfen 8 karakterden uzun yazmayınız. "; } ?> |
number_format() Sayıları basamaklamak...
Sayı türündeki değişken değerlerini bin basamaklı şeklinde biçimlendirmek için kullanılır. Parametre olarak sayı içeren değişkeni (ya da sayının kendisini), ondalık bölümün kaç haneli olacağını, ondalık haneyi ayırmak için kullanılacak karakteri, binler basamaklarını ayırmak için kullanılacak karakteri kabul eder.
Ayırma karakterlerini ifade eden parametreler seçimliktir. Bu parametreler belirtilmediğinde ondalık kısım görüntülenmez, sayı yuvarlanarak tam sayı haline getirilir ve binler basamaklarının ayırımında virgül (,) kullanılır.
Örnek:
<? $sayi=123123456.789123; print number_format($sayi); // 123,123,457
print "<br>";
print number_format($sayi,2,".",","); // 123,123,456.79
$sayi=123456789; print number_format($sayi,2,".",","); // 123,456,789.00 ?> |
Farkettiyseniz number_format() fonksiyonunu ondalık değer gösterecek şekilde kullanıldığında girilen sayı tamsayı bile olsa .00 olarak ondalık değer belirtiyor. Bir uygulamada şahsen bu durumu pek sevmemiş ve aşağıdaki gibi bir fonksiyon yazarak number_format()'ı doğrudan kullanmak yerine bu fonksiyonu kullanmıştım. Fonksiyon, girilen sayının içeriğine göre (türüne göre değil, neden değil? az sonra) ya number format()'ı ondalıklı haliyle koşuyor, yada normal olarak (ondalık parametreleri olmaksızın) koşuyordu. Girilen sayının türüne değil de içeriğine göre bakmasının nedeni de şu: sayının içeriğinde "." ifadesi olup olmadığına bakmak sayının is_integer() ile tamsayı olup olmadığına bakmaktan daha doğru cevap veriyordu zira integer sayılar belli bir değerden (2147483647) yukarısı için geçerli değildi. Türkiye'de bu sayının yetmeyeceği aşikar olduğundan ileride daha büyük sayılar da kullanıldığında doğru cevap versin diye bu yolu kullanmıştım.
<? function NumberFormat($number) { if (ereg(".",$number)) // number'in içerisinde . işareti var mı? //Düzenli ifadeler konusunda incelenecek... return number_format($number,2); else return number_format($number); }
$sayi=21474838649;
print NumberFormat($sayi); // 21,474,838,649 print "<br>";
$sayi=21474838649.123456;
print NumberFormat($sayi); // 21,474,838,649.12 print "<br>";
?> |
Sayfa başına geri dön..
Tarih Ve Saat Fonksiyonları
PHP'de tarih ve zaman bilgisini çok esnek bir biçimde kullanabilmemize izin veren önemli fonksiyonlar vardır:
getdate(),
date(),
time() ve
mktime() .
getdate()Bu fonksiyon çalıştırıldığında geriye bir dizi döndürür. Bu dizinin elemanlarını kullanarak o anki tarih ve zaman bilgisini programımıza rahatlıkla aktarabiliriz. Fonksiyon o anki zaman bilgisi ile ilgileniliyorsa parametresiz kullanılabilir. Ama geçmiş veya gelecekteki bir tarih için Unix Epoch biçiminde, ilgilenilen zamanı temsil eden bir parametre almalıdır.
Unix Epoch biçiminde zaman bilgisini elde etmek için kullanılan fonksiyonlar bu konuda anlatılacaktır.
getdate() fonksiyonun döndürdüğü dizinin indisleri ve değerleri:
"seconds" - saniye
"minutes" - dakika
"hours" - saat
"mday" - ayın kaçıncı günü olduğu bilgisi (1,2,3,... 31)
"wday" - haftanın kaçıncı günü olduğu bilgisi (Pazar: 0, P.Tesi: 1,... C.tesi: 6 )
"mon" - ay (1,2,...12)
"year" - yıl (2001,2002,...)
"yday" - yılın kaçıncı günü olduğu bilgisi (1,2,3,...365)
"weekday" - haftanın hangi günü olduğu bilgisi (Sunday, Monday,... Saturday)
"month" - ay (January,February,...December)
Örnek:
<? $tarih=getdate();
print $tarih[mday]."-".$tarih[mon]."-".$tarih[year]; //25-6-2002 ?> |
date()Bu fonksiyon parametre olarak özel biçimlendirme ifadeleri alır. Genel kullanım şekli:
| date("bicimlendirme parametreleri"); |
Özel biçimlendirme parametrelerinden en çok kullanılanları:
a 12 saat esasına daynan Anglo-Sakson sistemlerinde öğleden
önce ("am") veya öğleden sonra ("pm") işaretini sağlar.
A Aynı işaretlerinin büyük harfle yazılmasını sağlar.
d İki haneli gü sayısı, tek haneli günlerin önüne sıfır konur: "01"-"31"
D Üç haneli gün adı kısaltması: "Sun","Mon", ..
F Uzun ay adı: "January","February", ..
h 12 saatlik sistemde saat: "01"-"12"
H 24 saatlik sistemde saat: "00"-"23"
g 12 saatlik sistemde tek haneli saatlerin önüne sıfır konmadan saat: "1"-"12"
G 24 saatlik sistemde tek haneli saatlerin önüne sıfır konmadan saat: "0"-"23"
i Dakika: "00-59"
j Tek haneli sayıların önüne sıfır konmadan gün sayısı: "1"-"31"
l (Küçük l harfi) Uzun gün adı: "Sunday", "Monday", ..
L Artık yıl olup olmadığına ilişkin Boolean (doğru/yanlış) değişken.
Artık yıl ise 1 değilse 0 döndürür.
m Tek haneli sayıların önüne sıfır konarak ay sayısı: "01"-"12"
n Tek haneli sayıların önüne sıfır konmadan ay sayısı: "1"-"12"
M Kısaltılmış ay adı: "Jan","Feb", ..
s Saniye: "00"-"59"
S İngilizce "'nci" anlamında 2 karakter ek: "th","nd"
t Belirtilen ayın toplam gün sayısı: "28"-"31"
w Haftanın kaçıncı günü olduğu bilgisi: "0" Pazar, "6" Cumartesi
Y Dört haneli yıl: "2000"
y İki haneli yıl "02"
z Yılın kaçıncı günü olduğu bilgisi: "0"-"365"
Örnek:
<? print "Tarih: ".date("d-m-Y"); // Tarih: 25-06-2002 ?> |
Normalde date() fonksiyonunun içine "-" işaretinde olduğu gibi yazılması üzere başka metinler de girebilirsiniz. Ama pek çok harfe özel bir anlam yüklendiği için bu tür girişimler başarılı bir çıktı vermeyecektir. Mesela yukardaki örnekteki "Tarih" ifadesini date()'in içine ekleyemedik. Çünkü T, a, r, i ve h harflerinin hepsinin fonksiyon için ayrı bir anlamı var.
date() fonksiyonu, seçimlik olarak ikinci bir parametre alır. Bu parametre Unix Epoch biçiminde zaman bilgisi içermelidir. Böylece date() fonksiyonu o anki zaman göre değil belirtilen zamana göre çıktı üretecektir.
time()Bu fonksiyon parametresiz çalışır ve Unix Epoch biçiminde o anki zaman bilgisini içeren bir tamsayı değer döndürür. Hatırlarsanız
PHP'ye Veri Aktarımı konusunda ele alınan
çerez (cookie)'lerde çerezin ömrünü belirtmek için bu fonksiyonu kullanıyorduk.
time() fonksiyonuna saniye cinsinden değer ekleyip çıkartarak geçmiş ve gelecek tarihlere ait Unix Epoch biçiminde değer elde edebilir, bu değeri date(), getdate() gibi fonksiyonlarda kullanabiliriz.
Örnek:
<? $bugun=getdate(); print $bugun[mday]."-".$bugun[mon]."-".$bugun[year]; // 25-6-2002 print "<br>";
print date("d-m-Y"); // 25-6-2002 print "<br>";
$bugun=getdate(time()); print $bugun[mday]."-".$bugun[mon]."-".$bugun[year]; // 25-6-2002 print "<br>";
print date("d-m-Y",time()); // 25-6-2002 print "<br>";
$dun=getdate(time()-24*60*60); print $dun[mday]."-".$dun[mon]."-".$dun[year]; // 24-6-2002 print "<br>";
print date("d-m-Y",time()-24*60*60); // 24-6-2002 print "<br>";
$yarin=getdate(time()+24*60*60); print $yarin[mday]."-".$yarin[mon]."-".$yarin[year]; //26-6-2002 print "<br>";
print date("d-m-Y",time()+24*60*60); // 26-6-2002 ?> |
mktime()Bu fonksiyon parametre olarak aldığı zaman bilgilerine (saat, dakika, saniye, ay, gün, yıl) göre Unix Epoch biçiminde bir değer üretir. Parametresiz kullanıldığında o anki zaman için değer döndürür. time() fonksiyonunda sadece saniye cinsinden zaman üzerinde ileri geri oynanabildiği için mktime() fonksiyonu bu yönden daha kullanışlıdır.
Örnek:
<? // Bundan bir gün iki ay üç yıl önce'sine yolculuk yapalım.. $zaman=mktime(0,0,0,date("m")-1,date("d")-2,date("Y")-3); print "Dün: ".date("d-m-Y",$zaman); // 23-05-1999; ?> |
Sayfa başına geri dön..
Düzenli İfadeler
Dr. Hakkı Öcal'ın ifadesi ile UNIX İşletim Sistemini geliştirenlerin bilişim teknolojisine kazandırdığı paha biçilemez araçlardan biridir Düzenli İfadeler (Regular Expressions). Bu ifadeler sayesinde metinler içerisinde özel bir karakter dizilişini aratabilir, değiştirebilir ya da silebiliriz.
Bu alt başlık içerisinde düzenli ifadelerin nasıl oluşturulacağını örneklerle ifade etmeye çalışalım. Bu ifadelere ait fonksiyonlara da bir alt başlıkta değinelim..
"Bu" ile başlayan bütün kelimeleri bulur. ^ işareti, "verilen karaktersel değer içeren değişkenin yada metnin
başında arama yapılacağı" anlamına gelir. Yani bu örnek ile "Bu gün hava çok güzeldi" yada "Bulutlar ne kadar hızlı hareket ediyor.." cümlesi bulunabilir. Ancak "Herkes bu günü sabırsızlıkla bekliyordu..." cümlesi bulunamayacaktır.
"güzeldi" ile sonlanan bütün kelimeleri bulur. "Bu gün hava çok güzeldi" cümlesi bu ifade ile bulunabilir ama mesela cümlenin sonunda bir de nokta işareti (.) olsaydı eşleşme olmayacaktı.
Bu ifade ile sadece ve sadece "bu" kelimesini içeren değişkenler yada metinler bulunabilir. Yukarıdaki cümlelerden hiç biri bu ifade ile bulunamayacaktır.
İçinde "bu" gecen tüm tüm metinleri bulur. Yukarıdaki cümlelerin hepsi bu ifade ile bulunabilir.
Düzenli ifadelerde özel karakterler (tab, boşluk vb.) ve noktalama işaretleri (".", "," vb. ) önlerine ters bölü () işareti alarak kullanılmalıdır. Bunun dışında Düzenli İfadeler arama işlemlerinde kolaylık sağlayacak bazı özel karakterler de sunar. Bu ifadelerden bazıları:
t Tab Karakteri
r Enter (Satır başı) Karakteri
n Yeni satır karakteri
s Boşluk karakteri
Ters bölü karakterinin kendisi
d 0'dan 9'a herhangi bir rakam
w Herhangi bir harf, rakam ya da alt çizgi
W Harf, rakam ya da alt çizgi dışındaki karakterler
Karakter Grupları Düzenli ifadelerde aramaları kolaylaştırmak için karakter grupları oluşturabiliriz. Karakter grupları köşeli parantez "[ ]" içinde yazılır. Örneğin içinde "a","e", ve "i" geçen kelimeleri buldurmak için:
dememiz yeterlidir. Köşeli parantezler olmasaydı, "aei" diye bir kelimenin verilen metinde geçip geçmediğine bakılacaktı. Aşağıda belli başlı bazı grupların listesi ve çeşitli örnekler bulunmaktadır.
[] Hiç bir karakter
[a-z] Herhangi bir küçük harf
[A-Z] Herhangi bir büyük harf
[a-zA-Z] Herhangi bir büyük veya küçük harf
[0-9] Herhangi bir rakam
[0-9.-] Herhangi bir rakam veya nokta işareti ve ya kesme (tire) işareti
[trns] Herhangi bir sekme (Tab), satır başı (Enter),
yeni satır (New Line) veya boşluk (Space) karakteri
^[a-z][0-9]$ Küçük harfle başlayan ve rakamla sonlanan iki karakterli bir kelime
Grubun başı ve sonu belirlendiğinden sadece iki
karakterli kelimeler aranacaktır
^ işareti köşeli parantez içinde kullanıldığında olumsuzluk anlamı taşır.
^[^0-9][0-9]$ İlk karakteri rakam olmayan ancak rakamla sonlanan
iki karakterli bir kelime
[^a-z] Küçük harf olmayan herhangi bir harf
[^A-Z] Büyük harf olmayan herhangi bir harf
[^/^] , / veya ^ dışında herhangi bir müzik
[^"'] Çift ve tek tırnak dışında herhangi bir karakteri bulur.
Grup oluşturmada kullandığımız özel karakterler de vardır. Nokta (.) işareti, yeni satır başlangıcı olmayan herhangi bir karakter anlamına gelir.
PHP'nin hazır düzenli ifade grupları da vardır. Bunlardan bazıları:
[[:alpha:]] Herhangi bir harf
[[:digit:]] Herhangi bir rakam
[[:alnum:]] Herhangi bir harf veya rakam
[[:space:]] Herhangi bir boş karakter
[[:upper:]] Herhangi bir büyük harf
[[:lower:]] Herhangi bir küçük harf
[[:punc:]] Herhangi bir noktalama işareti
Düzenli ifadeleri belirtirken tekrar eden karakter sayısını belirtebiliriz. Bunun için süslü parantez ({}) kullanırız.
^a{4}$ İçinde sadece 4 adet küçük a harfi bulunan kelimeler: aaaa
^a{2,4}$ İçinde sadece iki, üç veya dört adet küçük a harfi bulunan kelimeler:
aa, aaa veya aaaa
^a{2,} Başında iki yada daha çok a harfi bulunan kelimeler: aabcdef,
aaabcdefg, aaaabcdefg gibi
t{2} Ardarda iki sekme işareti içeren metinler
.{2} Herhangi çift karakter içeren metinler: aa, &&, == gibi
Düzenli ifadelerde hatasız ve daha sade seçimler yazılabilmesi için PHP'de çeşitli kısayollar tanımlanmıştır.
? {0,1} anlamına gelir. Kendisinden önce yer alan unsurun en az sıfır
en çok bir kere tekrar edilmesi gerektiğini
(olmayabileceğini ama olursa en fazla bir kere olabileceğini) belirtir.
* {0,} anlamına gelir. Kendisinden önce gelen unsurun sıfır yada daha
fazla kere tekrar edilmesi gerektiğini
(tamamen seçimlik olduğunu) belirtir.
+ {1,} anlamına gelir. Kendisinden önce gelen unsurun en az bir yada
daha çok kere tekrar edilmesi gerektiğini
(bulunmasının zorunlu olduğunu) belirtir.
^[a-zA-Z0-9_]+$ En az bir harf, rakam veya alt çizgi içeren herhangi bir kelime
^[0-9]+$ Herhangi bir pozitif tamsayı
^-?[0-9]+$ Herhangi bir tamsayı
Bir düzenli ifadenin yazılışında birden fazla arama / sıralama deyimine yer verebiliriz. Bunun için boru (pipe) ( | ) karakteri kullanılır. Pipe karakteri
veya gibi davranacaktır.
.com|.net ".com" yada ".net" içeren kelimeler
^.+@.+..+$ Email adresi biçimine uyan kelimeler
^ Başında
.+ yani .{1,} yeni satır karakteri dışında bir karakteri en az bir kere içeren,
@ bir tane @ karakteri içeren,
.+ yani .{1,} yeni satır karakteri dışında bir karakteri en az bir kere içeren,
. bir tane nokta (.) karakteri içeren
.+$ yani .{1,}$ sonunda yeni satır karakteri dışında bir karakteri en az
bir kere içeren.
Örnek: hcivelek@kuzen.net
Sayfa başına geri dön..
Düzenli İfade Fonksiyonları
PHP'de düzenli ifadeleri kullanıp metinler üzerinde arama, değiştirme, silme gibi işlemler yapabileceğimiz bazı fonksiyonlar tanımlanmıştır. Bunlardan çok kullanılanları üzerinde duralım.
ereg() ve eregi()ereg() fonksiyonu ikisi zorunlu biri seçimlik üç parametre alır. İlk parametrede aramada kullanılacak düzenli ifade değeri, ikinci parametrede eşleşmenin yapılacağı metin veya metni ifade eden değişken belirtilir. Fonksiyon, üçüncü parametre olarak bir dizi-değişken ismi alır. Bu sayede eşleşme yapılacak düzenli ifadeler gruplar halinde verildiğinde eşleşmeye uyan her değer üçüncü parametre olarak verilen diziye kaydedilecektir. Hemen hatırlatalım, üçüncü parametrede biriktirilmek üzere oluşturulacak gruplar maksimum 10 tane olabilmektedir.
ereg() fonksiyonu eşleşme olduğu durumda TRUE, aksi halde FALSE değeri döndürecektir. ereg() ile eregi() fonksiyonları aynı mantıkla çalışır ancak eregi() fonksiyonu büyük küçük harf ayrımı yapmaz.
Genel yazım şekli:
| ereg(eslenecek_düzenli_ifade, icinde_arama_yapilacak_metin [, eslenen_düzenli_ifade_gruplari]) |
Aşağıdaki örnekleri inceleyim.
Örnek:
<? $metin="Bugün hava çok güzel";
if (eregi("hava",$metin)) print "Havadan sudan mı bahsedeceğiz?." ?> |
Yukarıdaki örnekte $metin değişkeni içerisinde "hava" ifadesinin olup olmadığı araştırılır. Eşleşme olması halinde eregi() ifadesi TRUE döndürür ve bu sayede print() fonksiyonu işleme konur.
Örnek:
<? if (!eregi('^.+@.+..+$',$email)) print "Email'inizde hata var." ?> |
Bu örnekte eregi() fonksiyonunun başındaki ünlem (!) işareti sayesinde $email değişkeninin düzenli ifade ile belirtilen eşleşmeye
uymaması halinde TRUE dönecektir ve print() fonksiyonu işleme konacaktır.
Örnek:
<? $metin="Bugün hava çok güzel ama keşke biraz rüzgar esse."; eregi("(hava).+(bir)",$metin,$eslenenler);
print "<pre>"; print_r($eslenenler); print "</pre>"; ?> |
Bu örnekte eregi() fonksiyonuna üçüncü parametre olarak $eslenenler değişkeni verilmiştir. Diğer örneklerden farklı olarak düzenli ifade içerisinde parantezli ifadeler vardır. Bu, "parantezli ifadelerde belirtilen eşleşme gruplarına uyan değer bulunursa bu değerleri $eslenenler dizisine kaydet" anlamına gelmektedir. İfadenin kendisi de bir düzenli ifade olduğu için $eslenenler dizisinde 0. eleman bu ifadeye uyan değer olacaktır. Yukarıda da değinildiği üzere parantez içerisindeki gruplar en çok 10 tane olabilmektedir.
Yukarıdaki kodun çıktısı şu şekilde olacaktır.
Array
(
[0] => hava çok güzel ama keşke bir
[1] => hava
[2] => bir
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
)
|
| Bu örnekte geçen print_r() fonksiyonu parametre olarak aldığı dizi değişkeninin içeriğini ekrana basmaktadır. |
ereg_replace() ve eregi_replace()Arattığımız düzenli ifadenin verilen metinde eşleşmesi halinde bu değeri başka bir değerle değiştirmek için ereg_replace() veya eregi_replace() fonksiyonları kullanılır. Aralarındaki fark ereg()-eregi()' de olduğu gibi büyük küçük harf ayrımıdır.
Genel yazım şekli:
| ereg_replace(eslenecek_düzenli_ifade, yerine_konacak_deger, arama_yapilacak_metin) |
ereg_replace ve eregi_replace() fonksiyonları sadece eşleşen değeri başka bir değere değiştirmekle kalmaz. Eşleşen ifadenin yerine konacak değerde eşleşen ifadenin eski halini de kullamamıza izin verir. Yani "eşleşen ifadeyi yeni ifade ile değiştir" işleminin yanı sıra "eşlenen ifadeyi, eşlenen ifadeye birşeyler ekleyerek değiştir" işlemini de yapar.
Bu son bahsettiğimiz özelliği kullanmak için birinci parametre olarak verilen düzenli ifadenin ereg() fonksiyonunda olduğu gibi parantezlerle gruplanması gerekir. Eğer birden fazla grup oluşturulmayacaksa parantezli ifadeye gerek yoktur. Eşlenen ifadeleri, değiştirilecek yeni değerin içinde , 1 .. ifadeleri ile kullanılırız.
İşlemler çok karıştı diyorsanız hemen örneklere geçelim.
| Eğer verilen düzenli ifadeye eşleşen kelimeleri değilde doğrudan bir kelimeyi başka bir kelime ile değiştirmek istiyorsanız benzer parametreler ile str_replace() fonksiyonunu da kullanabilirsiniz.. |
Örnek:
<? $metin="Bugün nedense hep yalnış yazıyorum."; $metin=ereg_replace("yalnış","yanlış",$metin); // metin içindeki "yalnış" kelimesi düzeltilip "yanlış" olarak değiştirilir..
print $metin;
?> |
Örnek:
<? $metin="Farzedelim ki bu metin bir HTML formundan gelen bilgiler içermektedir. Ve bu bilgileri ziyaretçi defterimizde görüntüleyeceğiz. Kötü niyetli kişiler bu alana HTML kod yazarak programcı tarafından istenmeyen durumlara yol açabilir. Mesela ben yazıyorum işte.. <a href="Javascript:alert('HEBELEEE HÜBELEE :)')">Buraya tıkla 100 milyon kazan</a> falan filan.. ";
$metin=ereg_replace("[<>]","",$metin);
print $metin;
// Bu kod ile "<" veya ">" karakterlerini "" (boşluk) ile değiştirmiş olduk.
?> |
Örnek:
Bir forum yazdığımızı düşünelim ve ziyaretçilerin girdiği yorumların arasında
http://web.sayfasi.adresi,
email@email.adresi,
ftp://ftp.adresi gibi ifadeleri ekrana basmadan önce gerçek birer bağlantı haline getirelim. Hatta gerekli her yerde kullanmak üzere bunu bir fonksiyon haline getirelim.
Bildiğiniz gibi http ve ftp adresleri benzer yapıda yazılırlar. Ancak email adresleri öyle değildir. Genelde doğrudan email@email.adresi şeklinde yazılırlar. Fakat bağlantı yaparken kullanılan yöntemler hemen hemen aynıdır. Sadece bağlantı protokol türü birinde http://, diğerinde mailto:// en sonuncusunda da ftp://'dir. O halde işimizi kolaylaştırması için yapmamız gereken birinci işlem metnin içerisinde email adresinin geçip geçmediğini öğrenmek ve varsa adresin başına "mailto://" ibaresi eklemek. Ondan sonra kodda da göreceğimiz gibi işimiz kolaylaşacaktır.
<? // ereg_replace fonksiyonlarındaki ifadesi "eşleşen değer" anlamındadır.
function BaglantiliYaz($mesaj) { $mesaj=ereg_replace("[^[:space:]<>]{1,}@[^[:space:]<>]{1,}.[^[:space:]<>]{1,}","mailto://",$mesaj); // metin içerisindeki "email@email.adresi" gibi bir ifadeler "mailto://email@email.adresi"'e dönüştürülüyor..
return ereg_replace('((http|ftp|mailto)://[^[:space:]<>]{1,})'," <a target="new" href=""></a>",$mesaj); // http://, mailto:// ftp:// gibi ifadeler bağlantı haline dönüştürülüyor.. }
$metin="[ÖRNEKTİR!!!] Merhaba, bir şey söylemek istiyorum: http://www.kuzen.net adresinde DatabaseGrid adında bir PHP classı varmış. Class'ı ftp://ftp.kuzen.net adresinden çekebilirsiniz.. Görüşlerinizi lütfen hcivelek@kuzen.net adresine bildirin.. [ÖRNEKTİR!!!]";
print nl2br(BaglantiliYaz($metin)); // nl2br() fonksiyonu, ziyaretçinin girdiği Enter (Yeni Satır) karakterini <br> etiketine çevirir.
?> |
Bu kodun çıktısı:
split()Bu fonksiyon, düzenli ifade olarak verilen değeri metni parçalara ayırmak için kullanır. Yani düzenli ifadeye uyan kısımlarından metni parçalar ve bir diziye kaydeder. Genel yazım şekli:
| $yeni_dizi=split("eşleştirilecek_sira", $arama_yapılacak_metin [, sınır_sayısı]); |
Fonksiyonun 3. parametresi seçimliktir ve oluşturulacak yeni diziye en fazla kaç eleman yazılmasını belirtmek için kullanılır. Belirtilmezse yeni diziye gerektiği kadar eleman konulacaktır.
Örnek:
<? $metin="Bir berber bir berbere bre berber demiş."; $parcalar=split(" ",$metin); // Metni, boşluklardan ayırdık.
print "<pre>"; print_r ($parcalar); print "</pre>";
/* Array ( [0] => Bir [1] => berber [2] => bir [3] => berbere [4] => bre [5] => berber [6] => demiş. ) */ ?> |