2017-06-23 9 views
-2

En tant que résultat de recherche, j'obtiens le contenu autour du mot de recherche. Mais il ne s'agit que d'une sous-partie de la page entière et ne comprend que les balises qui se trouvent à proximité du mot de recherche. Si la correspondance (ouverture/fin) est plus éloignée, je reste avec des balises HTML déséquilibrées. Ces balises déséquilibrées peuvent faire l'objet d'une mise en page au fur et à mesure que le navigateur tente d'équilibrer l'utilisation des balises d'un autre niveau.Comment nettoyer la partie source HTML?

exemple

cela pourrait être la page entière:

<li> 
    <h3>Ang my oniuse.</h3> 
    <p>Oh! any or said faing ear Dand and tion on so wor st wouter and abox 
    a makess stand he he sne at mon the nany ing a me come hink floney a 
    naiday. Smiler yousee lurneremiley boll his a grog.</p> 
</li> 
<li> 
    <h3>I'l hat seelectler</h3> 
    <p> Imay e ney, agat nould a fiver, and and hishuch what gook, ley hires 
    he cand and onius mon'l, handent a flit's and, th whey, hat wou used his 
    thend that ance, he ned and me lood says wou hed set pidays far it 
    conted, and seell yarty.</p> 
</li> 

recherche de seelectler pourrait entraîner une partie HTML comme:

naiday. Smiler yousee lurneremiley boll his a grog.</p> 
</li> 
<li> 
    <h3>I'l hat <b>seelectler</b></h3> 
    <p> Imay e ney, agat nould a fiver, and and hishuch what gook, ley hires 
    he cand and onius mon'l, handent a flit's and, th whey, hat wou used his 

Maintenant, la balise p et la li les balises sont déséquilibrées et avec les balises de fermeture, le navigateur essaie de fermer la balise p, qui pourrait être nd texte, et le li-tag qui pourrait être autour de chaque entrée trouvée.
Mais la prochaine ouverture de ces balises a les mauvaises classes css et certaines balises div entre li et p sont maintenant sans correspondance et la fermeture à la fin peut fermer les balises div à partir de la disposition des colonnes.

Résultat: La mise en page complète est interrompue.

Le résultat souhaité pourrait être soit (tous les tags non appariés sont appairés, cela ne peut pas être à toute épreuve):

<li><p> 
    naiday. Smiler yousee lurneremiley boll his a grog.</p> 
</li> 
<li> 
    <h3>I'l hat <b>seelectler</b></h3> 
    <p> Imay e ney, agat nould a fiver, and and hishuch what gook, ley hires 
    he cand and onius mon'l, handent a flit's and, th whey, hat wou used his 
</p></li>  

ou:

naiday. Smiler yousee lurneremiley boll his a grog. 
    <h3>I'l hat <b>seelectler</b></h3> 
    Imay e ney, agat nould a fiver, and and hishuch what gook, ley hires 
    he cand and onius mon'l, handent a flit's and, th whey, hat wou used his 

mais cette solution pourrait perdre la disposition importante par exemple sauts de ligne.

Existe-t-il un viewhelper qui peut nettoyer les balises HTML déséquilibrées en ajoutant les parties manquantes ou en supprimant les parties restantes?
Existe-t-il un algorithme/regexp pour détecter les tags non équilibrés?

+1

De quoi exactement avez-vous besoin pour élaborer davantage? –

+0

résultats attendus ajoutés –

+0

Je pense que son problème d'analyseur html dans l'extension index_search. il retournera le résultat avec la balise html. vous devez formater le résultat manuellement. Cochez cette réponse https://stackoverflow.com/questions/43848632/indexed-search-extbase-htmltags-in-output?answertab=active#tab-top. J'espère que ceci vous aidera! –

Répondre

0

Je suggère de supprimer toutes les balises html du résultat de la recherche. et utilisez les résultats de recherche en texte brut.

peut créer une légère "mise en forme" en remplaçant certaines balises par des sauts de ligne.

0

la solution la plus proche, je l'ai trouvé est avec ce ViewHelper:

<?php 
namespace MyCompany\MyExtension\ViewHelpers; 

use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; 

/** 
* fills in missing xml tags 
*/ 
class BalanceXmlViewHelper extends AbstractViewHelper 
{ 

    /** 
    * balances XML-fragment with additional tags 
    * 
    * @param string $xmlIn 
    * @return string 
    */ 
    public function render($xmlIn = null) 
    { 
     if (null === $xmlIn) { 
      $xmlIn = $this->renderChildren(); 
     } 

     $xmlDoc = new \DOMDocument(); 
     // it's UTF-8 data! 
     $xmlDoc->loadHTML('<?xml encoding="UTF-8">' . $xmlIn 
       // we want no complete HTML-document, so neglect some default-tags 
      , LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NOERROR | LIBXML_NOWARNING | LIBXML_NOXMLDECL 
     ); 

     // remove the additional charset tag and replace german umlauts 
     $retVal = html_entity_decode(mb_substr($xmlDoc->saveHTML(),23) 
            ,ENT_COMPAT | ENT_HTML401 
            ); 


     return $retVal; 
    } 
} 

Je sais qu'il pouvait rester avec des balises non valides (par exemple LI-étiquettes sans UL), mais il est plus précis que la suppression tous les tags (stripHTML()), ce qui donne un texte sans saut de ligne ou même un espace après suppression des balises de bloc.