考虑我有一个300-400字的文本和一些基本的HTML。例如:
<p>text text word1 text text text filament text text text text text text text text</p>
<p>text text text text text text text text text text text text text text text</p>
我有一个密钥短语列表与他们的网址相关联(约1000条记录)
word1 word2 => 'url'
house home => 'url1'
flower filament => 'url2'
我需要在文本中找到相应字词的网址。例如:
<p>text text <a href="url">word1</a> text [etc..]
我知道我可以使用简单的str_replace或preg_replace。但我不想添加许多链接。在300-400个单词中,我不想放置超过5-6个链接。
我能做什么?
答案 0 :(得分:2)
将preg_replace()与限制参数一起使用,当然它将是第一个X替换,可能是您想要的也可能不是
答案 1 :(得分:1)
一个小例子,justs使每个所需单词的第一个实例变为粗体。也应该很容易做其他的东西。 :)
<?
// Your text
$s = <<<YourText
<p>text text word1 text text text filament text text text text text text text text</p>
<p>text text text text text text text text text text text text text text text</p>
YourText;
// The words you want to highlight
$linkwords = array('text', 'word1', 'filament');
// Split the string by using spaces
$words = explode(' ', $s);
print_r($words);
// Words you have highlighted already.
$done = array();
// Loop through all words by reference
foreach ($words as &$word)
{
// Highlight this word?
if (array_search($word, $linkwords) !== false)
{
// Highlighted before?
if (array_search($word, $done) === false)
{
// Remember it..
$done[] = substr($word,0);
// And highlight it.
$word = '<b>'.$word.'</b>';
}
}
}
echo implode(' ', $words);
答案 2 :(得分:0)
首先,根据您的问题,我认为 words / links 的比率大约是60
。所以,举个例子,请执行以下操作:
define('WLRATIO', 60);
$mytext = "text text ..... ";
// Rough estimation of word count
$links = count(explode(' ', $mytext)) / WLRATIO;
$keywords = array(
'foo' => 'url1',
'bar' => 'url2'
...
);
$keys = array_keys($keys);
while ( $links-- ) {
$n = rand(0, count($keys)-1);
$mytext = preg_replace('/'+$keys[$n]+'/', '<a href="'+$keywords[$keys[$n]]+'">'+$keys[$n]+'</a>', $mytext, 1);
}
echo $mytext;