我尝试用条件替换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>
第二个链接没有按照我的意愿取代。
答案 0 :(得分:1)
哦,小伙子。您的决定是基于应用于包含所有链接的字符串的strpos的结果。由于$str
包含第一种类型的链接,因此相应的if条件始终为true。您可以使用正则表达式来解决该问题,或者如果这不仅仅是一个简化的示例,而是您的真实代码,请尝试以下方法:
$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;
答案 1 :(得分:1)
这是因为你的所有网址都在同一个字符串中,所以当它通过你的代码时,它匹配“sitea.com”比较,然后它匹配“vip:”比较,然后进入那个并用“aaa”替换替换所有出现的“sitea”。它永远不会进入“bbb”替换行,因为$ str总是包含“vip”。
您需要做的是将$ str拆分为一个网址数组并单独处理每个网址。
答案 2 :(得分:0)
这是因为您试图以不同方式解析每个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;
?>