【问题标题】:Should I use str_replace instead of substr?我应该使用 str_replace 而不是 substr 吗?
【发布时间】:2023-03-15 22:14:01
【问题描述】:

我正在使用具有自定义 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 吗?

【问题讨论】:

标签: php string replace


【解决方案1】:

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,并使用正则表达式替换 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);
}

【讨论】:

  • 感谢您的帮助。我尝试了所有这些,但不幸的是,它们都不起作用。 substr() 只是将“dsqce.com/…”和“laik”放在一起,而不是重写 URL 的开头和结尾。 preg_replace 和 str_replace() 只是将整个 URL 替换为“dsqce.com/…”。我会继续努力的。谢谢。
  • 我开始认为有些东西阻止了源 url 作为参数传递给函数。您能否通过调用WOKI_Change_Url 函数的相关代码示例来更新问题?你描述的行为符合$x 没有价值时会发生的情况。
  • 您可以通过在每个函数的第一行添加echo $x; 来验证这一点,或者如果这不起作用,则在某些测试中使用return $x; 来查看函数为来源网址。
  • 谢谢杰弗里。你的意思是添加 echo $x;在“函数 WOKI_Change_Url($x){”之前?
  • 不 - 我的意思是在该行之后立即添加它。不过,您可能看不到 echo 语句的输出,因此如果在该行之后立即添加它似乎没有任何作用,请改用 return $x;
猜你喜欢
  • 1970-01-01
  • 2011-03-02
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多