【发布时间】:2011-09-26 19:57:52
【问题描述】:
我有一篇 HTML 格式的文章。它包含很多可能有些人不会理解的行话。
我还有一个术语表(MySQL 表),其中包含对那里的人有帮助的定义。
我想浏览我文章的 HTML 并找到这些词汇表术语的实例,并用一些不错的 JavaScript 替换它们,这将显示一个带有术语定义的“工具提示”。
我已经差不多完成了,但我仍然遇到一些问题:
- 在单词中找到术语(即:APS 在 Maybe 中)
- 我必须确保它不会对 alt、标题、链接文本等执行此操作。所以只有没有应用任何格式的文本。但它需要在表格和段落中发挥作用。
这是我的代码:
$query_glossary = "SELECT word FROM glossary_terms WHERE status = 1 ORDER BY LENGTH(word) DESC";
$result_glossary = mysql_query_run($query_glossary);
//reset mysql via seek so we don't have to do the query again
mysql_data_seek($result_glossary,0);
while($glossary = mysql_fetch_array($result_glossary)) {
//once done we can replace the words with a nice tip
$glossary_word = $glossary['word'];
$glossary_word = preg_quote($glossary_word,'/');
$article['content'] = preg_replace_callback('/[\s]('.$glossary_word.')[\s](.*?>)/i','article_checkOpenTag',$article['content'],10);
}
这里是 PHP 函数:
function article_checkOpenTag($matches) {
if (strpos($matches[0], '<') === false) {
return $matches[0];
}
else {
$query_term = "SELECT word,glossary_term_id,info FROM glossary_terms WHERE word = '".escape($matches[1])."'";
$result_term = mysql_query_run($query_term);
$term = mysql_fetch_array($result_term);
# CREATING A RELEVENT LINK
$glossary_id = $term['glossary_term_id'];
$glossary_link = SITEURL.'/glossary/term/'.string_to_url($term['word']).'-'.$term['glossary_term_id'];
# SOME DESCRIPTION STUFF FOR THE TOOLTIP
if(strlen($term['info'])>400) {
$glossary_info = substr(strip_tags($term['info']),0,350).' ...<br /> <a href="'.$glossary_link.'">Read More</a>';
}
else {
$glossary_info = $term['info'];
}
return ' <a href="javascript:;" onmouseout="UnTip();" class="article_jargon_highligher" onmouseover="'.tooltip_javascript('<a href="'.$glossary_link.'">'.$term['word'].'</a>',$glossary_info,400,1,0,1).'">'.$matches[1].'</a> '.$matches[2];
}
}
【问题讨论】:
-
您是否尝试过用单词边界转义序列将正则表达式中的词汇表单词包围起来:
\b -
@SimpleCoder 介意举个例子吗?我对正则表达式不是很好
-
使用带有
javascript:伪 URL 的链接是一种不好的做法,它违反了 优雅降级 的原则(即您的网站应该在关闭 javascript 的情况下正常工作)。此外,不需要这种复杂性。要添加工具提示,只需将其放在TITLE属性中:例如<span title="This is a tooltip!">Jargon term</span>。所有现代浏览器(包括 IE6)都会在鼠标悬停时创建一个显示此文本的弹出窗口。亲吻 -
正如 DA 指出的那样,这个问题与 Search and Replace Words in HTML 重复。多次问这个问题没有帮助。
标签: php javascript mysql html regex