如何生成像谷歌用PHP和MySQL生成的代码片段?

omg*_*omg 6 php mysql search code-snippets

例如,它只返回搜索关键字所在的片段.

部分文字被"......"取代.

是否有可能通过PHP和MySQL实现这一目标?

Ale*_*art 9

修改deceze的功能稍微允许多个短语.例如,你的短语可以是"testa testb",如果它没有找到testa,那么它将转到testb.

function excerpt($text, $phrase, $radius = 100, $ending = "...") { 


         $phraseLen = strlen($phrase); 
       if ($radius < $phraseLen) { 
             $radius = $phraseLen; 
         } 

         $phrases = explode (' ',$phrase);

         foreach ($phrases as $phrase) {
             $pos = strpos(strtolower($text), strtolower($phrase)); 
             if ($pos > -1) break;
         }

         $startPos = 0; 
         if ($pos > $radius) { 
             $startPos = $pos - $radius; 
         } 

         $textLen = strlen($text); 

         $endPos = $pos + $phraseLen + $radius; 
         if ($endPos >= $textLen) { 
             $endPos = $textLen; 
         } 

         $excerpt = substr($text, $startPos, $endPos - $startPos); 
         if ($startPos != 0) { 
             $excerpt = substr_replace($excerpt, $ending, 0, $phraseLen); 
         } 

         if ($endPos != $textLen) { 
             $excerpt = substr_replace($excerpt, $ending, -$phraseLen); 
         } 

         return $excerpt; 
   } 
Run Code Online (Sandbox Code Playgroud)

突出功能

function highlight($c,$q){ 
$q=explode(' ',str_replace(array('','\\','+','*','?','[','^',']','$','(',')','{','}','=','!','<','>','|',':','#','-','_'),'',$q));
for($i=0;$i<sizeOf($q);$i++) 
    $c=preg_replace("/($q[$i])(?![^<]*>)/i","<span class=\"highlight\">\${1}</span>",$c);
return $c;}
Run Code Online (Sandbox Code Playgroud)


zby*_*ycz 6

我的多个关键字和多个出现的解决方案(也适用于不区分大小写的重音符号):

function excerpt($text, $query)
{
//words
$words = join('|', explode(' ', preg_quote($query)));

//lookahead/behind assertions ensures cut between words
$s = '\s\x00-/:-@\[-`{-~'; //character set for start/end of words
preg_match_all('#(?<=['.$s.']).{1,30}(('.$words.').{1,30})+(?=['.$s.'])#uis', $text, $matches, PREG_SET_ORDER);

//delimiter between occurences
$results = array();
foreach($matches as $line) {
    $results[] = htmlspecialchars($line[0], 0, 'UTF-8');
}
$result = join(' <b>(...)</b> ', $results);

//highlight
$result = preg_replace('#'.$words.'#iu', "<span class=\"highlight\">\$0</span>", $result);

return $result;
}
Run Code Online (Sandbox Code Playgroud)

这是query ="švihovprohlídkám"的示例结果

结果


hal*_*sed 0

$snippet = "//mysql query";

function trimmer($updates,$wrds){
    if(strlen($updates)<=$wrds){
        return $updates;
    }else{
    $marker = strrpos(substr($updates,0,$wrds),' ');
    $string = substr(substr($updates,0,$wrds),0,$marker)."...";return $string;
}

echo trimmer($snippet,200); //You can send the snippet string to this function it searches for the last space if string length is greater than 200 and adds "..." to it
Run Code Online (Sandbox Code Playgroud)

这可能就是您想要的(编辑):

$string1="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.";
function trimmer($updates,$wrds,$pos){
    if(strlen($updates)<=$wrds) {
        return $updates;
} else {
        $marker = strrpos(substr($updates,$pos,$wrds),' ');
        $string = substr(substr($updates,$pos,$wrds),0,$marker)."...";
        return $string;
    }
}

$pos = strpos($string1, "dummy");
echo trimmer($string1,100,$pos);
Run Code Online (Sandbox Code Playgroud)