我循环遍历文本字符串(在php中),将数据库中的某些关键字更改为链接。问题是当数据库中的单词彼此存在时,例如:
开发,开发,开发......
我最终得到了:
"Random string with the word <a href="developer"><a href="develop">develop</a>er</a> in it"
我需要这个只围绕开发者包装一个标签,而不是在其中包含开发 ......
这是我目前的职能:
function hyper($haystack){
$query = "SELECT * FROM `hyperwords` ";
$query .= "WHERE `active` = '1' ";
$query .= "ORDER BY LENGTH(hyperword) DESC ";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
$needle = $row['hyperword'];
$link = $row['link'];
$haystack = preg_replace("/($needle)/iu", "<a class='meta' href='$link'>$1</a>", $haystack);
}
return $haystack;
}
提前致谢!!!
答案 0 :(得分:1)
$altered = preg_replace("/\b($needle)\b/iu", "<a class='meta' href='$link'>$1</a>", $altered);
是你需要的:)
元字符 \ b 是一个锚点 插入符号和美元符号。它 匹配在一个叫做a的位置 “字边界”。这场比赛是 零长度。
有关详细信息,请参阅here:)