Yazýlarýmýzdaki linkleri otomatik çevirmek

Kategori: PHP ve MYSQL, Web Programlama |
Tarih

Regex (Regular Expressions : Düzenli Ýfadeler) Nedir?
Bütün programlama dillerinde kullanabileceðiniz çok iyi düþünülmüþ bir kural mekanizmasýdýr.
Ýlk baktýðýnýzda "bunun neresi düzenli, tam tersine bu þey oldukça düzensiz görünüyor" diyebilirsiniz. Çünkü gerçekten düzensiz görünen karakter grubudur. Regex (Regular Expressions'un genel olarak kýsaltmasý regex olarak kullanýlýr) bizim metinlerimiz içerisinden belirlediðimiz kurallara benzeyen metin parçalarýný seçmemizi; kullandýðýnýz dile göre deðiþtirmemizi de saðlayabilir. Mesela bir e-posta'nýn doðru olabilirlik kurallarý vardýr. Sitenizde girilen epostalarý bu þekilde doðru veya yanlýþ formatta olup olmadýklarýný kontrol edebilirsiniz.
Bu dökümanda otomatik olarak linkleri nasýl çevireceðimizden bahsedeceðim.

Metinlerde girilen þeylerin link olup olmadýklarýný bazý mantýksal kurallara göre bölelim
mesela bir link önce protokolü ile baþlar "http://" "ftp://" "ssh://" "file://" vb gibi. Bu baþlangýçlar bize girilen þeyin link olduðunu gösterebilir. Ayný þekilde hýzlý yazýmla birlikte "www." ile baþlayan þeyler ".com" ile biten þeyler de bize link olarak seçmemizi saðlayacak kriterler.

PHP'de regex fonksiyonlarý olarak erege_replace fln kullanabilirsiniz fakat preg_replace daha yetenekli olduðundan preg_replace'e özel bir düzenli ifade kuralý kullanacaðýz.
Þimdi doðrudan düzenli ifade kuralýný verip sonra açýklamaya çalýþacaðým :

http:// ftp:// gibi protokolü ile yazýlmýþ linkler için :

([n ])([a-z]+?)://([a-z0-9-.,?!%*_#:;~&$@/=+]+)

seçim kurallarýný kullanýyoruz.

En baþtaki [\n] link eðer satýr baþýnda ise seçebilmemizi saðlýyor. Eðer bu ibareyi belirtmezsek yüksek ihtimal sadece satýr içindeki linkler dönüþecektir. Bunu belirten kural 1. grup parantez olduðundan \1 ile kullanýlabilecek.

Genel bir kural koymadýk protokol belirtecimz için çünkü tonlarca farklý protokol var. Ýstersek ikinci grup parantez'e sadece http sadece ftp gibi belirteçler kullanarak istediðimiz protokole istediðimiz link deðiþimini uygulayabiliriz. Mesela smb:// için bir windows paylaþým iþareti koyabiliriz otomatik çevirdiðimiz link'in yanýna, ya da ftp:// için dosya transfer'i anlatan küçük bir ikon. Neyse ikinci grup parantez bizim protokol adýmýzý ifade ediyor. Bunu \2 ile otomatik link çevirmede kullanacaðýz.

Statik olarak "://" ibaresi arandýktan sonra 2. grup parantezde tüm linkimizi tarayabilecek kural bulunuyor. Burada dikkat etmemiz gereken þeyler, bir link'te kullanýlabilecek özel karakterler olacaktýr. Mesela bir linkte # & % = : ; gibi çok karakter vardýr. Eðer bunlarý belirtmezsek. Kullanýcýnýn burada belirtmediðimiz karakterleri içeren bir link giriþinde otomatik link çevirilirken o belirtmediðimiz karakterden sonrasý link'e dahil edilmeyecektir. Eski sitemde böyleydi
Bu üçüncü grup parantez'le seçilen "www.deneme.com.tr/deneme.php?asd=1&qwe=2$%_*#git" gibi kýsým \3 deðiþkenine atanacaktýr.

Sonuç olarak biz metinimizi þu aþaðýdaki kod ile otomatk link haline çevirebileceðiz :

<?php
$yazi = preg_replace("#([n])([a-z]+?)://([a-z0-9-.,?!%*_#:;~&$@/=+]+)#ie",

"'1<a href=\"2://3\">2://3</a>'", $yazi);
?>

Bu sitede kullandýðým otomatik link dönüþüm fonksiyonu ise þu þekilde :
Bu fonksiyon ile linklerinizi ve epostalarýnýzý otomatik dönüþtirebilirsiniz.

<?php
function linkler( $yazi ) {

// http seklindekiler
$yazi = preg_replace("#([n])([a-z]+?)://([a-z0-9-.,?!%*_#:;~&$@/=+]+)#ie",
"'1<a href=\"2://3\">2://3</a>'", $yazi);
// www seklindekiler
$yazi = preg_replace("#([n ])[Sadece Kayýtlý Kullanýcýlar Linkleri Görebilir. Kayýt Olmak Ýçin Týklayýn...][a-z0-9-]+).([a-z0-9-.~]+)((?:/[a-z0-9-.,?!%*_#:;~&$@/=+]*)?)#i",
"1<a href=\"http://www.2.34\">www.2.34</a>", $yazi);
// epostalar
$yazi = preg_replace("#([n ])([a-z0-9-_.]+?)@([w-]+.([w-.]+.)?[w]+)#i",
"1<a href=\"mailto:2@3\">2@3</a>", $yazi);
return($yazi);
}
?>

No tag for this post.

Program indir

2 Yorumlar Yazýlarýmýzdaki linkleri otomatik çevirmek konusuna”

  1. huseyin Says:

    Merhaba arkadaslar Sitemdeki urleler .net/aydin_yemekleri_ve_adetleri.hmtl

    Åžeklinde yani alt cizgili ( ___ )

    ben bunu assadaki gibi
    .net/aydin-yemekleri-ve-adetleri.hmtl

    Ortadan cizgili yapmak istiyorum ( ---- )

    Bunu nasil Yapabilirim

  2. selim61 Says:

    sanýrým dedigini .htaccess ten kolayca halledebilirsiniz.

Yorum Yaz

Free Desktop Wallpapers