1

我想这样当我输入例如“你好,我希望你有一个美好的一天再见”时,它只会突出显示“你好”和“再见”。我该怎么做呢?

因为目前它用黄色突出显示整条线,这不是我想要的。

下面是我的代码:

<?php
$words = $_POST['words'];
$words = preg_replace('/\bHello\b/i', 'Bonjour', $words);
$words = preg_replace('/\bbye\b/i', 'aurevoir', $words);
echo '<FONT style="BACKGROUND-COLOR: yellow">'.$words.'</font>';
?>
4

4 回答 4

2
<style type="text/css">
.highlight {
   background: yellow;
}
</style>
<?php
$words = $_POST['words'];
$words = str_ireplace('Hello', '<span class="highlight">Bonjour</span>', $words);
$words = str_ireplace('bye', '<span class="highlight">aurevoir</span>', $words);
echo $words;
?>
于 2013-02-14T12:27:46.183 回答
1

你的问题

您的最后一行,即与您的结果相呼应的那一行是错误的,因为您将整个句子包装在突出显示的上下文(<font>标签)中。

解决方案

  1. 您需要解析原始句子;
  2. 将关键字包装在突出显示的上下文中。

您可以在preg_replace()函数中执行此操作。我还建议使用目标是在上下文中指示相关性的<mark>标签。

代码

<?php 
$original_sentence = $_POST['words'];
$highlight_sentence = $original_sentence; 
$word_to_highlight = array('Hello', 'Bye'); // list of words to highlight

foreach ($word_to_highlight as $word) {
  $pattern = printf('/\b%s\b/i', $word); // match a different word at each step
  $replace_by = printf('<mark>%s</mark>', $word); // replacement is updated at each step
  $highlight_sentence = preg_replace($pattern, $replace_by, $words);
}
?>

<style type="text/css">
mark {
   background: #ffc;
}
</style>
于 2013-02-14T12:37:46.430 回答
1

尝试这样的事情:

<?php
$words = $_POST['words'];
$words = str_replace("hello", "<span class=\"highlight\">hello</span>", $words);
$wirds = str_replace("bye", "<span class=\"highlight\">bye</span>", $words);

print($words);

?>

// CSS FILE
.highlight {
    background-color: yellow;
}

这将在输出中的“hello”和“bye”周围放置黄色背景色。

于 2013-02-14T12:28:48.133 回答
0

是的,这种方法是合理的,但fonthtml 标签已过时,请span改用。

于 2013-02-14T12:26:58.303 回答