2017-01-17 1 views
0

J'utilise PHP Simple HTML Dom Parser pour extraire le contenu des valeurs de cellule d'une table HTML et les stocker dans un tableau.Simple PHP DOM Parser ajoute des espaces indésirables en texte brut

HTML:

<td class="inflexion">so<span class="deviation">y</span></td> 
<td class="inflexion"><span class="deviation">fui</span></td> 
<td class="inflexion"><span class="deviation">er</span>a</td> 
<td class="inflexion">haber sería</td> 

sortie souhaitée:

soja

FUI

ère

Haber sería

PHP:

function getvariations($conjtables){ 
    $conjtables = str_get_html($conjtables); 
    $variations = []; 
    foreach ($conjtables->find('td[class=inflexion]') as $inflexion) { 
     $variations[] = $inflexion->plaintext; 
    } 
    return array_unique($variations); 
} 
$variations = getvariations($conjtables); 
foreach ($variations as $variation) { 
    echo $variation . '<br>'; 
} 

Cela fonctionne, cependant, la sortie semble précéder certaines occurrences de l'élément de capacité avec un espace indésirable (voir troisième produit ci-dessous):

soja

FUI

er un

haber sería

Toutes les suggestions autour de la fixation de ce? Je ne peux pas supprimer arbitrairement des espaces parce que certaines cellules ont vraiment plusieurs mots comme dans le dernier élément de l'exemple donné.

+0

Récupère la valeur de 'span' intérieure et après elle et implode'em –

+0

Avez-vous vu que' a' de 'er a' est en dehors de' span '. Ajoutez des règles CSS comme '.deviation {margin: 0; padding: 0;}' ou déplacez le 'a' dans le' span'! – JustOnUnderMillions

+0

"a" est en dehors de la par conception et je ne peux pas changer cela. J'ai besoin des valeurs dans le but de les stocker dans une table MySQL, donc changer de CSS n'est pas très utile. – TheLearner

Répondre

2

Utilisez innertext avec strip_tags au lieu de plaintext:

function getvariations($conjtables){ 
    $conjtables = str_get_html($conjtables); 
    $variations = []; 
    foreach ($conjtables->find('td[class=inflexion]') as $inflexion) { 
     $variations[] = strip_tags($inflexion->innertext); 
    } 
    return array_unique($variations); 
} 
$variations = getvariations($conjtables); 
foreach ($variations as $variation) { 
    echo $variation . '<br>'; 
} 

Sortie:

soja

FUI

époque

haber sería

+0

Le seul problème est qu'il préserve les balises que je ne veux pas. Par exemple, au lieu de donner ** era **, il renvoie ** er a **. – TheLearner

+1

Peu importe. strip_tags() est ce qui l'a fait pour moi. Merci! – TheLearner