Par exemple, il renvoie simplement l'extrait autour duquel le mot clé de recherche existe. P>
et une partie du texte est remplacée par "...". P>
est-il possible d'atteindre cet objectif avec PHP et MySQL? P>
4 Réponses :
$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);
Pensez à ce que si les mots-clés existent 201 caractères du début. Vous avez renvoyé les 200 premiers caractères, mais sans mots-clés inclus.
J'ai ajouté une édition ... peut-être que c'est ce que tu veux
function excerpt($text, $phrase, $radius = 100, $ending = "...") { $phraseLen = strlen($phrase); if ($radius < $phraseLen) { $radius = $phraseLen; } $pos = strpos(strtolower($text), strtolower($phrase)); $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; } Shamelessly stolen from the Cake TextHelper.
La fonction de DÉCEZE modifiée légèrement pour permettre de multiples phrases. par exemple. Votre phrase peut être "TESTA TESTB" et s'il ne trouve pas TESTA, il ira à TestB.
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;}
Pouvez-vous mettre en évidence les phrases?
Je reçois un avertissement: Strows (): aiguille vide code> lors de la recherche d'une chaîne vide. J'ai essayé avec vérification si tout est vide, null ou même set, mais je reçois toujours cet avertissement ...
Je l'ai testé sur 3,9, et cela fonctionne, mais ils l'ont changé en 4.0 ... Toute information sur la façon de gérer cela?
Cela renvoie des extraits contenant uniquement le premier mot-clé. Peut-être que c'est ce que l'OP veut, peut-être que d'autres nécessiteraient d'avoir un extrait contenant autant de mots-clés que possible (plusieurs "extraits" séparés par des ellipsis "...").
Ma solution pour plusieurs mots-clés multiples et multiples occurrences (fonctionne également pour les accents insensibles insensibles): Ceci est exemple résultat pour Query = "Å¡vihov prohlãdkám" P > p> p>
FyI- Cela semble ne pas correspondre si la ligne dans $ texte contenant $ requise n'a pas de nouvelle ligne avant et après elle. $ text = "\ n $ {text} \ n" est une solution de contournement simple, mais le regex peut avoir besoin d'ajustement
Cela retourne très longs extraits si vous avez un long texte et de nombreux hits.
Superbes trucs! Merci.
ceux-ci sont appelés ellipsis (es) en.wikipedia.org/wiki/ellipsis