0

我正在尝试在字符串中查找某些单词并将其替换为页面链接

我有三个这样的数组(这只是一个例子,不是实际的东西: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

You should use str_ireplace function - it is not case-sensitive variant of str_replace function

于 2013-02-08T14:14:33.227 回答