2

我正在使用具有自定义 PHP 函数的数据提要插件,该函数允许我重写提要中的每个 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

“莱克”`分别。所以它应该变成:

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 吗?

4

1 回答 1

0

str_replace()可以适合您尝试做的事情,但他的方法也可以。他只是遗漏了一个参数 on 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代替,并使用正则表达式替换 . 之后的任何内容ref=。就像是:

function WOKI_Change_Url($x){
    $y = preg_replace("/ref=.*/", "ref=laik", $x); //this replaces the ref= part for anything... but I haven't tested it
    return "http://www.dsqce.com/click-111111-1111XX111?url=http%3A%2F%2Fwww.affiliatecompa.com" . urlencode($y);
}
于 2013-08-02T19:30:10.877 回答