0

文字列内の特定の単語を見つけて、ページへのリンクに置き換えようとしています

私はこのような3つの配列を持っています(これは実際のものではなく単なる例です:P)

$string = "Oranges apples pears Pears <p>oranges</p>";
$keyword = array('apples', 'pears', 'oranges');
$links = array('<a href="apples.php">Apples</a>', '<a href="pears.php">Pears</a>', '<a href="oranges.php">Oranges</a>');
$content = str_replace($keyword, $links, $string);
echo $content;

一部の単語を置き換えますが、すべてではありません。これは、一部の単語の前と一部の単語の最後にスペースがあり、一部が大文字になっているなどの理由によるものです。

私がやろうとしていることを達成するための最良の方法は何だろうと思っていました。preg_replace も試しましたが、正規表現が苦手です。

4

2 に答える 2

1

str_ireplaceを使用するだけです:

$string = "Oranges apples pears Pears <p>oranges</p>";
$keyword = array('apples', 'pears', 'oranges');
$links = array('<a href="apples.php">Apples</a>', '<a href="pears.php">Pears</a>', '<a href="oranges.php">Oranges</a>');
$content = str_ireplace($keyword, $links, $string);
echo $content;

スペースに問題はないはずです。str_replace の場合、検索語の前後にスペースがあるかどうかは関係ありません。

単語全体だけを置き換えたい場合は、正規表現を使用する必要があります。

$string = "Oranges apples pear Pears <p>oranges</p>";
$keyword = array('apples', 'pear', 'oranges'); // note: "pear" instead of "pears"
$links = array('<a href="apples.php">Apples</a>', '<a href="pears.php">Pears</a>', '<a href="oranges.php">Oranges</a>');
$content = preg_replace(array_map(function($element) {
    $element = preg_quote($element);
    return "/\b{$element}\b/i";
}, $keyword), $links, $string);
echo $content;
于 2013-02-08T14:14:08.077 に答える
0

str_ireplace 関数を使用する必要があります - str_replace 関数の大文字と小文字を区別するバリアントではありません

于 2013-02-08T14:14:33.227 に答える