【问题标题】:Search engine - before string and after搜索引擎 - 字符串之前和之后
【发布时间】:2014-11-21 11:22:18
【问题描述】:

A 有这样的事情。它工作正常,但我已经尝试了 2 个小时来削减搜索结果 - $word 之前的 100 str 和之后的 100。 我怎样才能做到这一点?

$word = $_POST["search"];

$sql_events = mysql_query("SELECT * FROM events WHERE event_title LIKE '%" . $word . "%' OR event_desc LIKE '%" . $word ."%'");

function highlightWords($content, $word){
    if(is_array($search)){
        foreach ( $search as $word ){
            $content = str_ireplace($word1, '<span>'.$word1.'</span>', $content);
        }
    } else {
        $content = str_ireplace($word, '<span>'.$word.'</span>', $content);     
    }
    return $content;
}
while($row = mysql_fetch_array($sql_events)){

    $content = $row["event_desc"];

    $result = highlightWords($content, $word);
    echo '<li>
            <H3><a href="">'.$row['event_title'].'</a></H3>
            <div class="text">'.$result .'...</div>
         </li>';
}

【问题讨论】:

  • 你到底想要什么?我不明白你的问题...
  • 我猜 OP 想要剪切结果,所以只有 $word 之前和之后的 100 个字符会显示给用户(而不是整个文档)。你试过什么?你能展示你最有希望的尝试吗?
  • 我想这是他们想要剪掉的字符串 - $content = $row["event_desc"];。我说的对吗?
  • $content = $row["event_desc"] - 是的。但是在搜索词周围剪掉它。我试过这个:preg_replace("/^.*?(.{0,100})\b($word)\b(.{0,100}).*?$/i", '\1&lt;span class="highlight_word"&gt;\2&lt;/span&gt;\3', $text);

标签: php string substring substr


【解决方案1】:

你需要这个正则表达式:

[\d\D]{0,100}word[\d\D]{0,100}

word 是主要词:)。这里是用你的代码实现的:

$content = $row["event_desc"];
$word_in_regexp = quotemeta($content);
preg_match("/[\d\D]{0,100}$word_in_regexp[\d\D]{0,100}/i", $content, $matches);
$content = $matches[0];

如果$content 包含[、(、\ 等字符,我们使用quotemeta()。

【讨论】:

  • 在此之后,浏览器像文本一样理解所有 PHP 代码。如果我将这个"/[\d\D]{0,100}$word_in_regexp[\d\D]{0,100}/" 更改为$word_in_regexp,PHP 代码可以工作,它根本不是回显结果值。
  • WP好像不喜欢正则表达式。
【解决方案2】:
$wordpos1 = (mb_strpos($content, $word) - 100);
  if ($wordpos1 < 0){
    $wordpos1 = 0;
  } else {
    $wordpos1 = (mb_strpos($content, $word) - 100);
  }
  $wordpos2 = (mb_strpos($content, $word) + 400);

  $resText = mb_substr($content, $wordpos1, $wordpos2);

  $result = highlightWords($resText, $word);

它对我有用:)

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多