我应该使用str_replace而不是substr吗?

时间:2013-08-02 10:31:54

标签: php string replace

我正在使用具有自定义PHP功能的数据Feed插件,该功能允许我重写Feed中的每个Buy_URL。比方说,原来的Buy_URL之一就是:

http://www.affiliatecompa.com/product/clean.com?ref=ab

我想用

重写URL的开头和结尾

http://www.dsqce.com/click-111111-1111XX111?url=http%3A%2F%2Fwww.affiliatecompa.com

分别是“laik”。所以它应该成为:

http://www.dsqce.com/click-111111-1111XX111?url=http%3A%2F%2Fwww.affiliatecompa.com/product/clean.com?ref=laik

我联系了该插件的作者,他告诉我将以下代码放在我主题的function.php中,然后在插件中调用该函数

function WOKI_Change_Url($x){
    $y = substr($x, 29);
    $y = substr($y, -2);
    return "http://www.dsqce.com/click-111111-1111XX111?url=http%3A%2F%2Fwww.affiliatecompa.com" . $y . 'laik';
}

显然它不起作用,因为它删除了URL的任何其他部分,现在每个Buyurl都已成为

http://www.dsqce.com/click-111111-1111XX111?url=http%3A%2F%2Fwww.affiliatecompa.comlaik

我怀疑substr在这种情况下不适合我想要做的事情。我应该在函数中使用str_replace吗?

1 个答案:

答案 0 :(得分:0)

str_replace()可以适合您要做的事情,但他的方法也可以。他刚刚在substr()上遗漏了一个参数。他的代码应该与添加的参数一起使用(假设你在字符串的ref=ab部分总是有一个2个字符的值:

function WOKI_Change_Url($x){
    $y = substr($x, 29);
    $y = substr($y, 0, -2); //the 0 here tells it to use the whole string, minus the last two chars; without the zero, this would muck things up a lot
    return "http://www.dsqce.com/click-111111-1111XX111?url=http%3A%2F%2Fwww.affiliatecompa.com" . $y . 'laik';
}

对于str_replace(),如果您知道要替换的内容的值,那也可以工作,但是使用str_replace进行转义会变得复杂。如果始终ref=ab完全被ref=laik替换,那么以下内容应该有效(使用urlencode()执行转义):

function WOKI_Change_Url($x){
    $y = str_replace($x, "ref=ab", "ref=laik"); //this replaces the ref=ab part
    return "http://www.dsqce.com/click-111111-1111XX111?url=http%3A%2F%2Fwww.affiliatecompa.com" . urlencode($y);
}

请注意,如果您不确定要替换ab,则可能需要使用preg_replace,而使用正则表达式来替换{{3}}之后的任何内容{1}}。类似的东西:

ref=