PHP заменить HREF по условию - PullRequest
0 голосов
/ 10 марта 2012

Я пытаюсь заменить href условием:

http://www.sitea.com/vip:  => http://localhost/aaa?search=
http://www.sitea.com/      => http://localhost/bbb/ (without 'vip:')
http://www.siteb.com/      => http://localhost/ccc/

Я использую strpos для судьи:

$str='<a href="http://www.sitea.com/vip:vp_14098">link A</a><a href="http://www.sitea.com/contact">link B</a><a href="http://www.siteb.com/player">link C</a>';
if(strpos($str,'www.sitea.com')!== false){
    if(strpos($str,'vip:')!== false){
        $str = str_replace('http://www.sitea.com/', 'http://localhost/aaa?search=',$str);
    }else{
        $str = str_replace('http://www.sitea.com/', 'http://localhost/bbb/',$str);
    }
}
if(strpos($str,'www.siteb.com')!== false){
    $str = str_replace('http://www.siteb.com/', 'http://localhost/ccc/',$str);
}
echo $str;

Но это вывод:

<a href="http://localhost/aaa?search=vip:vp_14098">link A</a>
<a href="http://localhost/aaa?search=contact">link B</a>
<a href="http://localhost/ccc/player">link C</a>

Вторую ссылку заменить не так, как мне хочется.

Ответы [ 3 ]

1 голос
/ 10 марта 2012

Это потому, что все ваши URL-адреса находятся в одной и той же строке, поэтому, когда он проходит через ваш код, он сопоставляется со сравнением «sitea.com», затем сопоставляется со сравнением «vip:», а затем переходит ви заменяет все вхождения «sitea» заменой «aaa».Он никогда не попадает в строку замены «bbb», потому что $ str всегда содержит «vip».

Что вам нужно сделать, это разбить ваш $ str на массив URL-адресов и обработать каждый из них по отдельности.

1 голос
/ 10 марта 2012

О, мальчик. Ваши решения основаны на результатах strpos, примененных к строке, содержащей все ссылки. Поскольку $str содержит ссылку первого типа, соответствующее условие if всегда выполняется. Вы можете использовать регулярное выражение для решения этой проблемы, или если это не просто упрощенный пример, а ваш реальный код, попробуйте это:

$str='<a href="http://www.sitea.com/vip:vp_14098">link A</a><a href="http://www.sitea.com/contact">link B</a><a href="http://www.siteb.com/player">link C</a>';
$str = str_replace('http://www.sitea.com/vip:', 'http://localhost/aaa?search=vip:',$str);
$str = str_replace('http://www.sitea.com/', 'http://localhost/bbb/',$str);
$str = str_replace('http://www.siteb.com/', 'http://localhost/ccc/',$str);
echo $str;
0 голосов
/ 10 марта 2012

Это потому, что вы пытаетесь разобрать каждый URL по-разному, и вы делаете их все в одной строке. Str_replace ВСЕГДА находит: vip, потому что он находится во всей вашей строке.

Здесь будет пост, который, вероятно, даст вам некоторые регулярные выражения для использования, но это не моя область знаний. Вместо этого я предложу вам следующие изменения в вашем коде:

<?php
    $str='<a href="http://www.sitea.com/vip:vp_14098">link A</a><a href="http://www.sitea.com/contact">link B</a><a href="http://www.siteb.com/player">link C</a>';
    $str = str_replace('http://www.sitea.com/vip:', 'http://localhost/aaa?search=',$str);
    $str = str_replace('http://www.sitea.com/', 'http://localhost/bbb/',$str);
    $str = str_replace('http://www.siteb.com/', 'http://localhost/ccc/',$str);
    echo $str;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...