PHP str_replace无法按预期工作,返回多个值

时间:2012-10-19 06:19:51

标签: php str-replace

我有这个使用str_replace函数的代码:

$result = mysql_query("SELECT * FROM table");
$contact_link = "<a href=\"/contact-us/\" class=\"inline\" target=\"_parent\">Contact Us</a>";

while($row = mysql_fetch_array($result))
{
$answer = str_replace(array("contact us","Contact Us","Contact us") , array($contact_link , $contact_link , $contact_link), $row['answer']);
echo $answer;
}

但是,当我输入字符串“contact us”时,它会返回此值:

<a href="/contact-us/" class="inline" target="_parent"><a href="/contact-us/" class="inline" target="_parent">Contact Us</a></a>

我无法弄清楚原因。我希望它只返回一个链接而不是两个链接封装的联系我们。我想也许是因为两个单词都以小写字母开头,所以也许它会两次返回?一次用于“联系我们”,一次用于“联系我们”?我已经阅读了这个网站上的搜索结果并完成了一些谷歌搜索,但我找不到任何有相同情况发生的事情。

如果它是相关的,我这样做的原因是当我的客户更新他的网站时,它将返回到他的联系页面的链接。我希望有三个不同版本的联系我们,因为格式可能会根据他使用它的位置而改变。

2 个答案:

答案 0 :(得分:5)

您可以使用str_ireplace,它不区分大小写。看看:

http://php.net/manual/en/function.str-ireplace.php

您获得此输出的原因是因为该功能首先检查“联系我们”并将其替换为链接,然后查找刚刚添加的“联系我们”,并再次替换它。

str_ireplace("contact us", $contact_link, $row['answer']);

答案 1 :(得分:0)

真正的问题是您的联系人链接内部文本也会被联系人链接本身取代!

因此,当您更换第一个联系我们的实例时,您正在添加另一个实例。相反,你可以像Pedryk建议的那样一次性取代。