Je suis en train de faire ce qui suit:PHP obtenir 10 mots dans une phrase de recherche
saisir 5 mots avant l'expression de recherche (ou Y, s'il n'y a que des mots Y at-il) et 5 mots après l'expression de recherche (ou y s'il n'y a que des mots y at-il) d'un bloc de texte (quand je dis des mots que je veux dire des mots ou des chiffres ce qui est dans le bloc de texte)
par exemple
le bloc de texte: « Bienvenue à la pile Débordement! Visitez votre page d'utilisateur pour définir votre nom et votre adresse e-mail. "
si vous étiez à la recherche « visiter votre » il retourne: « Bienvenue sur Stack Overflow Visitez votre page utilisateur pour définir votre »
J'ai essayé d'utiliser cette
$preg_safe = str_replace(" ", "\s", preg_quote($search));
$pattern = "/(\w*\S\s+){0,8}\S*\b($preg_safe)\b\S*(\s\S+){0,8}/ix";
if(preg_match_all($pattern, $full_text, $matches))
{
$result = str_replace(strtolower($search), "<span class='searched-for'>$search</span>", strtolower($matches[0][0]));
}
else
{
$result = false;
}
Et fonctionne si la phrase de recherche est en anglais, mais j'en ai besoin pour travailler dans d'autres langues. Cela ne fonctionne pas pour une phrase de recherche en hébreu par exemple.
J'ai essayé de changer le modèle à:
$pattern = "(*UTF8)/(\w*\S\s+){0,8}\S*\b($preg_safe)\b\S*(\s\S+){0,8}/i";
Mais cela n'a pas fonctionné.
Comment puis-je le faire fonctionner pour d'autres langues?
////////////////// EDIT //////////
Comme enrico.bacis a suggéré - j'ai changé le modèle de :
$pattern = "/(\w\p{Hebrew}*\S\s+){0,20}\S*\b($preg_safe)\b\S*(\s\S+){0,20}/ixu";
maintenant, il travaille pour des expressions de recherche en anglais et en hébreu, mais le texte de résultat est coupé quand il y a un caractère spécial (» par exemple).
Comment faire en sorte que le motif renvoie le texte autour de la phrase de recherche même s'il contient des caractères spéciaux?
Je l'ai besoin de travailler pour l'hébreu et l'anglais et à l'avenir il y aura d'autres langues ainsi – Shani1351
Je l'ai mieux expliqué, vérifiez maintenant –
Merci pour votre réponse.S'il vous plaît voir la section d'édition dans la question d'origine – Shani1351