php输出突出显示关键字的文本


php outputting text with keywords highlighted

我有一个输出影评的系统,当它被输出时,我希望从两个表中出现的关键词——阴性和阳性——是不同的颜色,有什么想法吗?代码低于

<?php
// Connect to database
mysql_connect("sdd", "sdsd", "") or die(mysql_error());
mysql_select_db("sdsd") or die(mysql_error());
$id = mysql_real_escape_string($_POST['reviewid']); 
//$query = "select * from review where id = '$id'";
$query = mysql_fetch_assoc(mysql_query("SELECT filmreview FROM review WHERE id = '$id'"));
$pos = mysql_query("SELECT word FROM positive");
$neg = mysql_query("SELECT word FROM negative");

//Variables 
$review_text = $query['filmreview'];
$good = 0;
$bad = 0; 

// Gets words in to a text array and converts to lower case 
$cnt_r = array_count_values(array_map('mb_strtolower',str_word_count($review_text, 1)));
// Gets the positive words and check for the word in the text  
    while($check = mysql_fetch_assoc($pos)){
       $lower = mb_strtolower($check['word']);
     if(isset($cnt_r[$lower])){
    $good+= $cnt_r[$lower];
    echo $check ['word'];
    echo "<p>"; 
     } 
    }
// Gets the negative words and check for the word in the text 
while($check = mysql_fetch_assoc($neg)){
  $lower = mb_strtolower($check['word']);
 if(isset($cnt_r[$lower])){
    $bad+= $cnt_r[$lower];
        echo $check ['word'];
        echo "<p>";
 }  
} 

// If there are more positive words than negative than the review is positive  
if ($good > $bad)
{
    echo "<p>"; 
    echo "This is a positive review";
    echo "<p>";
}
// If there are more negative words than positive than the review is negative 
else if ($good < $bad)
{
    echo "<p>";
    echo "This is a negative review";
    echo "<p>";
}
// If there are the same amount of positive and negative words than the review is average 
else if ($good == $bad)
{
    echo "<p>";
    echo "This is an average review";
    echo "<p>";
}
//Prints out the number of postive and negative words found 
echo "Good words: " . $good . " and Bad words: " . $bad;
echo "<p>";
echo $query ['filmreview'];
echo "<p>";
echo "This is <font color='"blue'">blue</font>!"; 

echo "<form method='post' action='welcome.html'>";
echo "<input type='submit' name='searchagain' value='Search'>";
?>

您可以使用CSS类。

在您的样式表或页面中的样式标签中,您可以创建css类:

p .negative { color: red; }
p .positive { color: black; }

现在只需将类添加到段落中,它就会应用您想要的样式。

// If there are more positive words than negative than the review is positive  
if ($good > $bad)
{
    echo '<p class="positive">'; 
    echo 'This is a positive review';
    echo '</p>';
}
// If there are more negative words than positive than the review is negative 
else if ($good < $bad)
{
    echo '<p class="negative">';
    echo 'This is a negative review';
    echo '</p>';
}

等等。。。。。

只需在文本中搜索并找到关键字,然后替换它们。所以大致

    if($postivekeyword) {  
       $newpostivekeyword = '<span class="positive">'.$postivekeyword.'</span>';
   }
    if($negativekeyword) {  
      $newnegativekeyword = '<span class="negative">'.$negativekeyword.'</span>';
    }

然后只是

   $new_review_text = str_replace($postivekeyword, $newpostivekeyword, $review_text);
  1. 尝试在发送查询后立即读取其响应。这样可以避免多个查询的结果阻塞内存
  2. $cnt_r = array_count_values(array_map('mb_strtolower',str_word_count($review_text, 1)));似乎是$cnt_r = str_word_count(mb_strtolower($review_text), 2);的破旧版本
  3. str_word_count不是多字节安全的。在Smarty中,我使用了preg_match_all('#['w'pL]+#u', $review_text, $matches);作为str_word_count()的UTF-8版本的基础
  4. 仔细查看PDO
  5. 给你的变量一些识别名称
  6. 请始终正确地配置您的输出-可以使用htmlspecialchar()
  7. 现在是2012年,我们从未使用过<font>标签!请改用CSS

<?php
$query = mysql_fetch_assoc(mysql_query("SELECT filmreview FROM review WHERE id = '$id'"));
$review_text = $query['filmreview'];
// Gets words in to a text array and converts to lower case 
$review_words = array_count_values(array_map('mb_strtolower',str_word_count($review_text, 1)));
$positive_words = array();
$negative_words = array();
$positive_words_count = 0;
$negative_words_count = 0;
// Gets the positive words and check for the word in the text  
$res = mysql_query("SELECT word FROM positive");
while ($row = mysql_fetch_assoc($res)){
    // why isn't this already stored lower-case in database?
    $_word = mb_strtolower($row['word']);
    if (isset($review_words[$_word])){
        $positive_words_count += $review_words[$_word];
        $positive_words[] = $_word;
    } 
}
// Gets the negative words and check for the word in the text 
$res = mysql_query("SELECT word FROM negative");
while ($row = mysql_fetch_assoc($res)){
    // why isn't this already stored lower-case in database?
    $_word = mb_strtolower($row['word']);
    if (isset($review_words[$_word])){
        $negative_words_count += $review_words[$_word];
        $negative_words[] = $_word;
    }  
}
if ($positive_words_count > $negative_words_count) {
    // If there are more positive words than negative than the review is positive  
    echo "<p>This is a positive review<p>";
} elseif ($positive_words_count < $negative_words_count) {
    // If there are more negative words than positive than the review is negative 
    echo "<p>This is a negative review<p>";
} else {
    // If there are the same amount of positive and negative words than the review is average 
    echo "<p>This is an average review<p>";
}
// highlight positive/negative words
$review_text = htmlspecialchars($review_text);
$pattern = '#'b(' . join('|', $positive_words) . ')'b#i';
$review_text = preg_replace($pattern, "<span class='"positive'"''1</span>", $review_text);
$pattern = '#'b(' . join('|', $negative_words) . ')'b#i';
$review_text = preg_replace($pattern, "<span class='"negative'"''1</span>", $review_text);
//Prints out the number of postive and negative words found 
echo "Good words: " . $positive_words_count . " and Bad words: " . $negative_words_count;
echo "<p>" . $review_text . "<p>";
echo "This is <font color='"blue'">blue</font>!"; 

并且在CSS中的某个地方定义span.negativespan.positive应该是什么样子。