簡體   English   中英

如何使代碼段修剪成易於閱讀的句子-PHP

[英]how to make snippet trimmed to a human readable sentence - php

首先,我要感謝您幫助我創建了一個非常不錯的搜索結果查詢。 希望您的朋友可以幫助我改善它。

這是查詢

$searchresult = $mysql->query("SELECT * FROM pages WHERE PageContent LIKE '%$searchTerm%'");

if($searchresult->num_rows > 0) {

    while (($row = $searchresult->fetch_assoc()) !== null)
    {
        echo '<h3>' . $row["PageTitle"] . '</h1>';

        $position = strpos($row["PageContent"], $search);
        $snippet = substr($row["PageContent"], $position - 200, $position + 200);

        echo $snippet . '<hr><br />';  
    }

} else {
     echo "<p>Sorry, but we can not find an entry to match your query</p><br><br>"; 
}

我想做的是對代碼段進行修整,使其不打斷任何單詞,從而使句子易於閱讀....並盡可能使搜索詞以粗體顯示。 親愛的朋友,我需要您的幫助。 謝謝大家。

有很多改進的余地,但是有一種方法:

<?php

echo trimsnippet("Some really, really, really reaaally long text I don't really care about, at all.", "text", 30) . "\n";


function trimsnippet($text, $query, $max_length){
  $position = strpos($text, $query); 
  $snippet = substr($text, max($position - $max_length - 1, 0), strlen($query) + $max_length*2 + 1);
  echo "<$snippet>\n";
  preg_match("/[^\w](?P<pre>.*)".$query."(?P<post>.*)[^\w]/", $snippet, $extracted); 
  return $extracted["pre"]."<strong>".$query."</strong>".$extracted["post"];
}

輸出:

真的,真的reaaally長文本我真的不關心,

如何使用它:

忽略第一行(回聲...),這只是一個演示。 將函數放在使用函數的php中的任何位置,然后替換行:

    $position = strpos($row["PageContent"], $search);
    $snippet = substr($row["PageContent"], $position - 200, $position + 200)

與:

    $snippet = trimsnippet($row["PageContent"], $search, 200);

您可以對此功能進行一些改進:

  • 檢查$ query確實出現在$ text中
  • 在結果的開頭或結尾添加省略號(...)
  • 控制$ query在開始和結尾附近時會發生什么(在這種情況下,請避免添加省略號)
  • 清理$ query(可能還有$ text),因此它不能包含可能與您的regex模式混淆的“ regex語法”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM