首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php用条件替换href

问php用条件替换href
EN

Stack Overflow用户
提问于 2012-03-10 06:45:28
回答 3查看 298关注 0票数 0

我尝试用条件替换href:

代码语言:javascript
复制
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进行判断:

代码语言:javascript
复制
$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;

但是下面的输出:

代码语言:javascript
复制
<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>

第二个链接没有像我希望的那样被替换。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-10 06:52:06

哦,天哪。您的决策基于对包含所有链接的字符串应用strpos的结果。由于$str包含第一种类型的链接,因此相应的if-condition始终为真。您可以使用正则表达式来解决该问题,或者,如果这不只是一个简化的示例,而是您的实际代码,请尝试如下所示:

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2012-03-10 06:55:16

这是因为所有的urls都在相同的字符串中,所以当它遍历您的代码时,它匹配"sitea.com“比较,然后它匹配"vip:”比较,然后它进入该比较,并用您的"aaa“替换替换所有出现的"sitea”。它永远不会进入"bbb“替换行,因为$str总是包含"vip”。

您需要做的是将您的$str拆分为一组urls,并分别处理每个urls。

票数 1
EN

Stack Overflow用户

发布于 2012-03-10 06:52:12

这是因为你试图以不同的方式解析每个url,而且你都是在同一个字符串中解析它们。str_replace总是查找:vip,因为它在您的整个字符串中。

这里会有一篇文章,可能会给你一些正则表达式的使用,但这不是我的专业领域。相反,我将为您的代码提供以下更改:

代码语言:javascript
复制
<?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;
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9642001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档