如何生成类似于 Google 使用 PHP 和 MySQL 生成的代码段?

2021-12-20 00:00:00 search php mysql code-snippets

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

For example, it just returns the snippet around which the searching keyword exists.

并且部分文字被替换为...".

And part of the text is replaced by "...".

使用 PHP 和 MySQL 是否有可能实现该目标?

Is it possible to achieve that goal with PHP and MySQL?

推荐答案

稍微修改了 deceze 的功能以允许多个短语.例如您的短语可以是testa testb",如果没有找到 testa,则它会转到 testb.

Modified deceze's function slightly to allow multiple phrases. e.g. your phrase can be "testa testb" and if it does not find testa, then it will go to 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; 
   } 

突出显示功能

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;}

相关文章