0

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 つではなく 1 つのリンクでカプセル化された Contact Us が返されることを期待していました。たぶん両方の単語が小文字で始まるからだと思ったので、2回返すのでしょうか?「お問い合わせ」に1回、「お問い合わせ」に1回?このサイトの検索結果を読み、Google で検索しましたが、同じシナリオが発生しているものは見つかりません。

関連する場合、これを行っているのは、顧客が自分の Web サイトを更新したときに、連絡先ページへのリンクが返されるようにするためです。彼が使用する場所によってフォーマットが変わる可能性があるため、これら 3 つの異なるバージョンの連絡先を取得したいと考えています。

4

2 に答える 2

5

大文字と小文字を区別しないstr_ireplaceを使用できます。見て:

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

この出力が得られる理由は、関数が最初に「お問い合わせ」をチェックしてリンクに置き換え、次に追加されたばかりの「お問い合わせ」を探して再度置き換えるためです。

str_ireplace("contact us", $contact_link, $row['answer']);
于 2012-10-19T06:26:29.490 に答える
0

本当の問題は、連絡先リンクの内部テキストも連絡先リンク自体に置き換えられていることです!

そのため、contact us の最初のインスタンスを置き換えると、別のインスタンスが追加されます。代わりに、Pedryk が提案するように、すべてを一度に置き換えることができます。

于 2012-10-19T06:27:17.727 に答える