lostyazilim
tr.link

PHP Düzenli İfade url

17 Mesajlar 3.286 Okunma
lstbozum
tr.link

cristogi cristogi WM Aracı Kullanıcı
  • Üyelik 13.04.2012
  • Yaş/Cinsiyet 40 / E
  • Meslek Grafik Tasarım
  • Konum İstanbul Avrupa
  • Ad Soyad ** **
  • Mesajlar 237
  • Beğeniler 77 / 43
  • Ticaret 7, (%100)
Herkese merhaba, internette çok araştırdım ama bulamadım sorunum şu ki;

Veri tabanından çektiğim yazının içinde url ler var ancak bunların hepsinin değil sadece belirttiğim ifadenin geçtiği url'lerin linke dönüşmesini istiyorum. Bunu nasıl yapabilirim. Şimdiden teşekkür eder, hayırlı akşamlar dilerim.


Örn:

$metin = "Veritabanından çektiğim düz metnin ve bir link http://abc.com ve başka bir link daha http://www.xyz.com ama sadece abc.com ifadesinin geçtiği url'nin linke dönüşmesi gerekiyor";
 

 

wmaraci
reklam

muratsal muratsal Sms Onayı Gerekli Banlı Kullanıcı
  • Üyelik 28.11.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım Mühendisi
  • Konum Eskişehir
  • Ad Soyad ** **
  • Mesajlar 109
  • Beğeniler 11 / 14
  • Ticaret 1, (%100)
string değiştirme kullanabilirsin http://php.net/manual/en/function.str-replace.php
 

 

cristogi cristogi WM Aracı Kullanıcı
  • Üyelik 13.04.2012
  • Yaş/Cinsiyet 40 / E
  • Meslek Grafik Tasarım
  • Konum İstanbul Avrupa
  • Ad Soyad ** **
  • Mesajlar 237
  • Beğeniler 77 / 43
  • Ticaret 7, (%100)
str_replace değil de düzenli ifade ile nasıl yapabilirim acaba? preg_replace ile
 

 

alabacaknet alabacaknet Developer Kullanıcı
  • Üyelik 14.09.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım geliştirme
  • Konum Ankara
  • Ad Soyad M** A**
  • Mesajlar 217
  • Beğeniler 55 / 48
  • Ticaret 0, (%0)
istenilenleri array'a atabilirsin, ayrıca istenilmeyenleri de array'a atıp eğer eşleşiyorsa continue diyerek pas geçebilirsin

Unutmayın kullandığım düzenli ifade çok sıradan ve basit, daha gelişmişini bulup bu mantıkla yapabilirsin diye düşünüyorum


$metin = "Veritabanından çektiğim düz metnin ve bir link http://abc.com ve başka bir link daha http://www.xyz.com ama sadece abc.com ifadesinin geçtiği url'nin linke dönüşmesi gerekiyor";

$istenilen = array("abc.com");

foreach( $istenilen as $link ) {

$regUrl = "/(http|https|ftp|ftps)\:\/\/".preg_quote($link)."(\/\S*)?/i";

// eşleşiyorsa
if(preg_match($regUrl, $metin, $url)) {
// metni değiştir diyoruz
$metin = preg_replace($regUrl, "".$link."", $metin);
}

}

// test için yazdır
echo $metin;
?>
 

 

Murat Alabacak <http://muratalabacak.net>
wmaraci
wmaraci

cristogi cristogi WM Aracı Kullanıcı
  • Üyelik 13.04.2012
  • Yaş/Cinsiyet 40 / E
  • Meslek Grafik Tasarım
  • Konum İstanbul Avrupa
  • Ad Soyad ** **
  • Mesajlar 237
  • Beğeniler 77 / 43
  • Ticaret 7, (%100)
@alabacaknet çok teşekkür ederim, metni explode edip str_replace yapıyordum yani baya bir uğraştırdı, teşekkürler paylaşım için.
 

 

alabacaknet alabacaknet Developer Kullanıcı
  • Üyelik 14.09.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım geliştirme
  • Konum Ankara
  • Ad Soyad M** A**
  • Mesajlar 217
  • Beğeniler 55 / 48
  • Ticaret 0, (%0)
rica ederim, regUrl değişkeni içindeki $link değişkenini preg_quote ile güvene aldım, kodunu güncelle istersen.
 

 

Murat Alabacak <http://muratalabacak.net>

cristogi cristogi WM Aracı Kullanıcı
  • Üyelik 13.04.2012
  • Yaş/Cinsiyet 40 / E
  • Meslek Grafik Tasarım
  • Konum İstanbul Avrupa
  • Ad Soyad ** **
  • Mesajlar 237
  • Beğeniler 77 / 43
  • Ticaret 7, (%100)
@alabacaknet ben çok bilmiyorum ama yanıt beklerken uğraştığım şeyide bitiriyim dedim. Aşağıdaki gibi bir kod yaptım ve denedim oldu. Hangisini kullanmalıyım hangisi doğru;

$yenimetin = explode(" ",$metin);
for($i=0;$i{
if ( strpos($yenimetin[$i],"abc.com") )
{ $deger = $yenimetin[$i]; }
}

if ( strpos($metin,$deger) )
{ $yenisekli = str_replace($deger,"$deger",$metin); }

echo $yenisekli;

benim yaptığım uzun yazılarda kastırır değil mi?

Ek Olarak: senin yaptığın daha doğru galiba çünkü array() olmuş virgül atıp başka değerlerde koyabilirim değil mi? Evet denedim, birden fazla değer yapabiliyoruz.

Teşekkürler

Ek Olarak: Evet gördüm güncelliyorum o |ftp|ftps ifadeleri kaldırsam sorun yapmaz değil mi?
 

 

alabacaknet alabacaknet Developer Kullanıcı
  • Üyelik 14.09.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım geliştirme
  • Konum Ankara
  • Ad Soyad M** A**
  • Mesajlar 217
  • Beğeniler 55 / 48
  • Ticaret 0, (%0)
bu kodla sadece 1 url'yi linke çevirebilirsin $deger'i array şeklinde düzenlersen yazdığın kodda çalışabilir diye düşünüyorum ayrıca birden fazla abc.com değerlerinde bütün abc.com yazılarını linke çevirecektir, ama yani uzun yazılarda tek tek kelimeleri inceleyeceği için sayfa yüklenme süresinde mikro saniyelik artışlar yapabilir



$degerler = array();
$yenimetin = explode(" ",$metin);
for($i=0;$i{
if ( strpos($yenimetin[$i],"abc.com") )
{ $degerler[] = $yenimetin[$i]; }
}

// aşağıdaki satırı yazmadığında eğer herhangi bir link ile rastlamazsa ekrana boş çıktı verir!
$yenisekli = $metin;
foreach( $degerler as $deger ) {
if ( strpos($metin,$deger) )
{ $yenisekli = str_replace($deger,"{$deger}",$metin); }
}

echo $yenisekli;

- üstteki kodu test etmedim

Ek Olarak:

cristogi adlı üyeden alıntı

@alabacaknet ben çok bilmiyorum ama yanıt beklerken uğraştığım şeyide bitiriyim dedim. Aşağıdaki gibi bir kod yaptım ve denedim oldu. Hangisini kullanmalıyım hangisi doğru;

$yenimetin = explode(" ",$metin);
for($i=0;$i{
if ( strpos($yenimetin[$i],"abc.com") )
{ $deger = $yenimetin[$i]; }
}

if ( strpos($metin,$deger) )
{ $yenisekli = str_replace($deger,"$deger",$metin); }

echo $yenisekli;

benim yaptığım uzun yazılarda kastırır değil mi?

Ek Olarak: senin yaptığın daha doğru galiba çünkü array() olmuş virgül atıp başka değerlerde koyabilirim değil mi? Evet denedim, birden fazla değer yapabiliyoruz.

Teşekkürler

Ek Olarak: Evet gördüm güncelliyorum o |ftp|ftps ifadeleri kaldırsam sorun yapmaz değil mi?


tabi ftp adreslerini kullanmıyorsan kaldırabilirsin
 

 

Murat Alabacak <http://muratalabacak.net>

cristogi cristogi WM Aracı Kullanıcı
  • Üyelik 13.04.2012
  • Yaş/Cinsiyet 40 / E
  • Meslek Grafik Tasarım
  • Konum İstanbul Avrupa
  • Ad Soyad ** **
  • Mesajlar 237
  • Beğeniler 77 / 43
  • Ticaret 7, (%100)
preg_quote olayını bilmiyorum ne işe yarıyor acaba. preg_quote li verdiğin ilk kodu kullanıyorum ftp'leri kaldırarak, seni de uğraştırdım hakkını helal et :)
 

 

alabacaknet alabacaknet Developer Kullanıcı
  • Üyelik 14.09.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım geliştirme
  • Konum Ankara
  • Ad Soyad M** A**
  • Mesajlar 217
  • Beğeniler 55 / 48
  • Ticaret 0, (%0)

cristogi adlı üyeden alıntı

preg_quote olayını bilmiyorum ne işe yarıyor acaba. preg_quote li verdiğin ilk kodu kullanıyorum ftp'leri kaldırarak, seni de uğraştırdım hakkını helal et :)


helal olsun ya ne demek :D

preg_quote şöyle bir şey şimdi biz ".$link." dedik ya düzenli ifadelerde bazı karakterler (köşeli parantez, yıldız vs..) özel anlamlar taşıyor yani aslında $link değişkeninde ne yıldız ne de parantez bulunur ama eğer bulunursa bunların başına tıp ki tırnakları yaptığımız gibi ters slash ekliyor ve şöyle yapıyor:

$link = "yanlislink*.com"

preg_quote yapınca PHP bunu şöyle anlıyor: yanlislink\*.com

yıldızın taşıdığı özel anlamı görmezden geliyor
 

 

Murat Alabacak <http://muratalabacak.net>
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al