Промяна на определен линк в текст.

Ticketa

Registered
Искам да търся в текста дали съществува даден домейн без значение дали накрая е: saita.com/blabla.php?asd=2

или е само saita.com

Стигнах до тук:
PHP:
<?php
echo "Търсим http://asdasd.fr<br />";
$str = 'http://asdasd.fr | http://foobar.fr |  Did you mean: http://foobar.eu/index.php?id=1&b=6#2310';
$predi = htmlspecialchars("$str", ENT_QUOTES);
echo "Текст преди промяната:<br> {$predi}<br>";
if (preg_match_all('`.*?((http|ftp)://[\w#$&+,\/:;=?@.-]+)[^\w#$&+,\/:;=?@.-]*?`i', $str, $matches)) {
	echo "Общо: ";
	$broi = count($matches[0]);
	echo "{$broi} линка<br>";
	$i = -1;
	$i2 = 1;
	$i3 = 0;
	while ($i < $broi-1) {
		$i = $i+1;
		$i2 = $i+1;			
		$string = $matches[1][$i];
		$find = 'http://foobar.fr'; 
		$replace = "http://google.com";

		if(strpos($string, $find) ===false) { 
			echo ''; //no matches
		} else {
			$i3=$i3+1;
			//matches
			echo "{$i2} ";
			print_r($matches[1][$i]);
			echo "<br />";
			$newphrase = str_replace($matches[1][$i], $replace, htmlspecialchars("$str", ENT_QUOTES));
		}
	}
	echo "Попадения: {$i3}<br />";
	$new = htmlspecialchars("$str", ENT_QUOTES);
	echo "<h3>Текст след промяната:</h3> <br />".$newphrase;
}
?>

Обаче, заменя само когато търся http://foobar.fr , но не и друг домейн/сайт/ и не го заменя :(

Ударете едно рамо, мерси!
 
Първо не се заменя със стойността, която е в променливата $find и второ ескейпва се амперсант точно там където нетрябва.

Код:
<?php
echo "Търсим http://asdasd.fr<br />";
$str = 'http://asdasd.fr | http://foobar.fr |  Did you mean: http://foobar.eu/index.php?id=1&b=6#2310';
$predi = htmlspecialchars("$str", ENT_QUOTES);
$newphrase = $predi;
echo "Текст преди промяната:<br> {$predi}<br>";
if (preg_match_all('`.*?((http|ftp)://[\w#$&+,\/:;=?@.-]+)[^\w#$&+,\/:;=?@.-]*?`i', $str, $matches)) {
        echo "Общо: ";
        $broi = count($matches[0]);
        echo "{$broi} линка<br>";
        $i = -1;
        $i2 = 1;
        $i3 = 0;
        while ($i < $broi-1) {
                $i = $i+1;
                $i2 = $i+1;                     
                $string = $matches[1][$i];
                $find = 'http://foobar.eu/index.php?id=1&b=6#2310'; 
                $replace = "http://google.com";

                if(strpos($string, $find) ===false) { 
                        echo ''; //no matches
                } else {
                        $i3=$i3+1;
                        //matches
                        echo "{$i2} ";
                        print_r($matches[1][$i]);
                        echo "<br />";
                        $newphrase = str_replace($find, $replace, $str);
						$newphrase = htmlspecialchars("$newphrase", ENT_QUOTES);
                }
        }
        echo "Попадения: {$i3}<br />";
        $new = htmlspecialchars("$str", ENT_QUOTES);
        echo "<h3>Текст след промяната:</h3> <br />".$newphrase;
}
?>
 
Ами, ако искам със един въведен домейн да се заменят всички линкове, съвпадащи с него независимо от /blabla.php?page=2 ?
 
Ticketa каза:
Ами, ако искам със един въведен домейн да се заменят всички линкове, съвпадащи с него независимо от /blabla.php?page=2 ?
ако съм разбрал правилно замени
PHP:
$newphrase = str_replace($find, $replace, $str);
с
PHP:
$newphrase = str_replace($string, $replace, $str);
 

Горе