Merhabalar arkadaşlar,
kelimeleri değiştirmek isterken bir yerde sıkıntı çekiyorum.
Sıkıntı şu,
str_replace("aranan","degisen","metin");
şeklindeki yapımda aranan kelime örneğin, resim olsun değişen yapı ise,
<a href="resimler.net">resim</a>
ama gelen metinde <img src="http://www.aaaa.com/resim/aaaa.jpg">
var ise bu sefer resim src kısmına link basıyor ve resim çıkmıyor.
bu yapının çıktısı aşağıdaki gibidir.
<img src="http://www.aaaa.com/<a href="resimler.net">resim</a>/aaaa.jpg
bunu nasıl engelleyebilirim.
teşekkür ederim.
Basit str_replace Hatası
6
●386
- 18-02-2015, 12:01:50Ben yazdığınızdan hiçbir şey anlamadım, kodlarınızı paylaşırsanız yardımcı olalımPiEycPi adlı üyeden alıntı: mesajı görüntüle
- 18-02-2015, 12:02:44str yerine preg ile yapabilirsin aşağıdaki örnekteki gibi.PiEycPi adlı üyeden alıntı: mesajı görüntüle
echo preg_replace('/<a href="(.*)">(.*)</a>/','<a href="$1">degisen</a>',"metin"); - 18-02-2015, 12:48:54Misafir adlı üyeden alıntı: mesajı görüntüleTam olarak kullandığım yapı.yvolkan adlı üyeden alıntı: mesajı görüntüle
$result = str_replace(array_map('maskit',array_keys($arr)),a rray_values($arr),$text); - 18-02-2015, 14:49:34PiEycPi adlı üyeden alıntı: mesajı görüntüle
echo preg_replace('/<a href="(.*)">(.*)</a>/','<a href="$1">'.array_values($arr).'</a>',$text);bu şekilde nasıl sonuç alıyorsun acaba - 20-02-2015, 10:36:00Merhabalar hocam,yvolkan adlı üyeden alıntı: mesajı görüntüle
ekrana herhangi bir veri basmamaktadır. - 20-02-2015, 14:41:13
<?php $veri = '<img src="http://www.aaaa.com/resim/aaaa.jpg">'; $veri2 = 'resim'; function CustomSTR($aranan,$degisen,$metin){ $sonuc = strpos($metin,"img"); if($sonuc === false){ return str_replace($aranan,$degisen,$metin); } } echo CustomSTR('resim','<a href="resimler.net">resim</a>',$veri2); echo CustomSTR('resim','<a href="resimler.net">resim</a>',$veri); ?>
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:41:13 -->-> Daha önceki mesaj 14:08:50 --
Sanırım işine bu yarayacak;
class replaceIfNotInsideTags { private function checkOpenTag($matches) { if (strpos($matches[0], '<') === false) { return $matches[0]; } else { return '<a href="'.$matches[1].'">'.$matches[1].'</a>'.$this->doReplace($matches[2]); } } private function doReplace($html) { return preg_replace_callback('/(\b'.$this->word.'\b)(.*?>)/i', array(&$this, 'checkOpenTag'), $html); } public function replace($html, $word) { $this->word = $word; return $this->doReplace($html); } } $html = 'resim ve <img src="http://www.aaaa.com/resim/aaaa.jpg" />'; $obj = new replaceIfNotInsideTags(); echo $obj->replace($html, 'resim');