Mam na przykład tekst:

Etiam Porta Sem Malesuada Magna Mollis Euismod. Integer Posuere Erat A Ante Venentis Dapibus Posuere Velit Anit. Etiam Porta Sem Malesuada Magna Mollis Euismod. Aenean UE Leo Quam. Pelletesque Ornare SEM Lacinia Quam Venentis Vestibulum. Fusce Dapibus, Tellus AC Cursus Commodo, Tortor Mauris Condimentum Nibh, UT Fermentum Massa Justo Sit Amet Risus.

Nulla Vitae Elit Libero, Pharetra Augue. Visibulum id ligula porta felis euismod semper. Visibulum id ligula porta felis euismod semper. Maecenas SED DIM EGET RISUS VARIUS Blandit Siedzieć Amet Non Magna. Visibulum id ligula porta felis euismod semper. Integer Posuere Erat A Ante Venentis Dapibus Posuere Velit Anit.

Cras Mattis Consetetur Purus Siedzieć Amet Fermentum. Etiam Porta Sem. Malesuada Magna Mollis Esuismod. Preesent Commodo Cursus Magna, Vel Scelerisque NIL Consetetur et. Maecenas Faucibus Mollis Interdum. Nullam Quis Risus Eget Urna Mollis Ornare Vel Eu Leo.

Ten tekst pojawia się jako opis na wyszukiwaniu wykonanej na mojej stronie i chcę być w stanie podświetlić słowo / ciąg i wyodrębnij tekst obok niego.

Nie jestem pewien, że najlepszy sposób będzie PHP (prawdopodobnie jest) lub po prostu użyj funkcji jQuery. Wiem, jak podkreślić słowo w jQuery, ale nie wiem, jak wyodrębnić tekst.

W tym przykładzie chcę pokazać jako opis, ponieważ mój wyszukiwany ciąg jest "Consetetur Purus" następujący tekst.

.... Posuere Velit Aliquet.Cras Mattis Consetetur Purus Siedzieć Amet fermentacja. Etiam Porta ....

Jak widzisz, nie tylko pokazując podświetlone słowo, ale także jakiś tekst przed i po tym. Jaka byłaby najlepsza metoda do tego osiągnięcia?

Używam biblioteki Swish-E jako wyszukiwarki na mojej stronie, a moja znajomość CGI ma null, więc wolę wypróbować drogę PHP.

Dużo dziękuję za całą twoją pomoc

7
chifliiiii 26 październik 2011, 04:23

3 odpowiedzi

Najlepsza odpowiedź

Używanie wyrażenia regularnego w PHP (jednak możesz zrobić to samo w JavaScript).

$regex = '/([A-Za-z0-9.,-]+\s*){0,5}\sconsectetur purus(\s|[,.!?])(\s*[A-Za-z0-9.,-]+){0,5}/';
preg_match($regex, $content, $matches);
echo $matches[0];

Dotyczy to 0-5 słów zbudowanych za pomocą znaków alfanumerycznych lub jednego z {x0}} (finetune to), a następnie słowa, których szukasz (z interpunkcją lub bez końca), a następnie 0-5 słów. To nigdy nie rozdzieli słowa w środku, ponieważ osiągnięto pewną ilość znaków.

Wynik:

Posuere Velit Aniquet.

Cras Mattis Consetetur Purus Siedzieć Amet Fermentum. Etiam Porta.

Teraz możesz dostroić to, np. Usuń \n i ..., podświetl {x2}} ...

6
middus 26 październik 2011, 11:39

Zależy to od tego, jak otrzymasz odpowiedź po prośbie wyszukiwania i sposób pracuje w wyszukiwarkach.

Jeśli jesteś celem, jest "na wpisaniu" wyszukiwania, jak "Google" - wtedy lepiej byłoby to zrobić przez PHP, aby przeciąć przeniesioną dane i odpadów mniej ruchu.

W przeciwnym razie, jeśli otrzymasz cały tekst jako odpowiedź i nie masz nic przeciwko obciążeniu - zrób to z JS za pomocą REGEXP lub zliczania string.charAt( int ).

1
Michael Sazonov 26 październik 2011, 00:37

Stworzyliśmy małą bibliotekę, aby to zrobić. Podkreślił słowa, które wspomniasz i dają ci ekscytowanie zdań wokół twoich zapytań.

$lorumIpsum = "three paragraps of lrum ipsum";
TextSnippet::createSnippet('Lorem', $lorumIpsum);

Spowoduje to następujący tekst:

Lorem Ipsum Dolor Siedzieć Amet, Elit Elit Elit. ... Etiam Bibrendum Lorem NEC Tempus Sollicydyn. ... sed w Dapibus Lorem . ... Nunt Turpis Ipsum, Bibendum Quis Sodales SED, UllamCorper et Lorem . Donec et Metus Hendrerit, Interdum Elit UT, Dignissim Dui.

Klasa ALS obsługuje ustawienie znacznika HTML do podświetlenia i ustawienie Min- i Maksymalne słowa Foppet.

Zobacz Swisnl / Tekstypet na Github.

0
Bjorn 29 lipiec 2017, 11:18