Comment récupérer dans mon Code PHP et via DOMDocument le DEBUT et la FIN du CONTENU de la balise "small" ???

Eléphant du PHP | 137 Messages

11 juin 2022, 19:56

Bonjour.


Voici le code HTML de toutes balises small dont je souhaiterais récupérer dans une variable $start_small_tag_contain, le début de son contenu qui est (<a et aussi dans une variable $end_small_tag_contain, la fin de son contenu qui est </a>):

Code : Tout sélectionner

<small>(<a href="https://www.wikidata.org/wiki/Q22302383" class="extiw"> <span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small> <small>(<a href="https://en.wikipedia.org/wiki/Donna_Zuckerberg" class="extiw"> <span class="indicateur-langue" title="Article sur Wikipédia en anglais">en</span></a>)</small>

Et voici comment j'obtiens toutes les balises small de la page https://fr.wikipedia.org/wiki/Mark_Zuckerberg avec DOMDocument :

Code : Tout sélectionner

libxml_use_internal_errors(true); $parser = new DOMDocument(); $parser->loadHTMLFile("https://fr.wikipedia.org/wiki/Mark_Zuckerberg"); $get_small_tags = $parser->getElementsByTagName("small"); foreach ($get_small_tags as $get_small_tag) { ... }

Comment récupérer dans la boucle foreach, dans une variable $start_small_tag_contain, le début du contenu de la balise small (<a ET dans une autre variable $end_small_tag_contain, la fin du contenu de la même variable small ceci: </a>) ???

Merci.

Mammouth du PHP | 1967 Messages

11 juin 2022, 20:46

le défi m'a interpellé donc j'ai tenté le truc, mais ce n'est pas une habitude de donner un code tout fait ici
<?php
libxml_use_internal_errors(true);
$parser = new DOMDocument();
$parser->loadHTMLFile("https://fr.wikipedia.org/wiki/Mark_Zuckerberg");
$get_small_tags = $parser->getElementsByTagName("small");
$start_small_tag_contain = '';
$end_small_tag_contain = '';
foreach ($get_small_tags as $get_small_tag) {
	$var = 'start_small_tag_contain';
	foreach($get_small_tag->childNodes as $child){
		if ($child->nodeType == 3) {
			$$var = $child->wholeText;
		} else if ($child->nodeType == 1) {
			$$var .= '<'.$child->tagName;
			$var = 'end_small_tag_contain';
		}
	}
	var_dump($start_small_tag_contain);
	var_dump($end_small_tag_contain);
}
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 137 Messages

11 juin 2022, 21:03

Merci pour le temps accordé mais ça ne marche pas du tout. Voici ce que les deux var_dump retournent:

Code : Tout sélectionner

string(3) "(
Et on n'y voit ni $start_small_tag_contain ni $end_small_tag_contain.

Sachant que la variable $start_small_tag_contain devrait normalement être égale à:

Code : Tout sélectionner

$start_small_tag_contain = "(<a";
Et la variable $end_small_tag_contain égal à:

Code : Tout sélectionner

$start_small_tag_contain = "</a>)";
Des idées s'il vous plaît ???
Modifié en dernier par chegmarco le 11 juin 2022, 21:23, modifié 3 fois.

Mammouth du PHP | 1967 Messages

11 juin 2022, 21:07

regarde le code source

mais c'est vrai que j'ai oublié une ligne
<?php
libxml_use_internal_errors(true);
$parser = new DOMDocument();
$parser->loadHTMLFile("https://fr.wikipedia.org/wiki/Mark_Zuckerberg");
$get_small_tags = $parser->getElementsByTagName("small");
$start_small_tag_contain = '';
$end_small_tag_contain = '';
foreach ($get_small_tags as $get_small_tag) {
	$var = 'start_small_tag_contain';
	foreach($get_small_tag->childNodes as $child){
		if ($child->nodeType == 3) {
			$$var = $child->wholeText;
		} else if ($child->nodeType == 1) {
			$$var .= '<'.$child->tagName;
			$var = 'end_small_tag_contain';
			$$var = '</'.$child->tagName.'>';
		}
	}
	var_dump($start_small_tag_contain);
	var_dump($end_small_tag_contain);
}
sinon, précise ta requète car c'est pas clair
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 137 Messages

11 juin 2022, 21:16

Rien n'a changé. Ce que je souhaiterais c'est que:

1 - La variable de début:
$start_small_tag_contain
retourne (le début de la parenthèse "(" et l'ouverture de la balise "a"):

2 - Et que celle de la fin:
$start_small_tag_contain


soit égal à (la fin de la balise "a" et aussi celle de la parenthèse ")" ):

Code : Tout sélectionner

</a>)
J'ai vraiment besoin de votre aide.

Mammouth du PHP | 1967 Messages

11 juin 2022, 21:36

<?php
libxml_use_internal_errors(true);
$parser = new DOMDocument();
$parser->loadHTMLFile("https://fr.wikipedia.org/wiki/Mark_Zuckerberg");
$get_small_tags = $parser->getElementsByTagName("small");
foreach ($get_small_tags as $get_small_tag) {
	$var = 'start_small_tag_contain';
	$start_small_tag_contain = '';
	$end_small_tag_contain = '';
	foreach($get_small_tag->childNodes as $child){
		if ($child->nodeType == 3) {
			$$var .= $child->wholeText;
		} else if ($child->nodeType == 1) {
			$$var .= '<'.$child->tagName;
			$var = 'end_small_tag_contain';
			$$var .= '</'.$child->tagName.'>';
		}
	}
	var_dump($start_small_tag_contain);
	var_dump($end_small_tag_contain);
}
et regarde la source (ctrl + U)

moi j'obtiens

Code : Tout sélectionner

[...]:19:string '(<a' (length=3) [...]:20:string '</a>)' (length=5) [...]:19:string '(<a' (length=3) [...]:20:string '</a>)' (length=5) [...]:19:string '(<a' (length=3) [...]:20:string '</a>)' (length=5) [...]:19:string '(<a' (length=3) [...]:20:string '</a>)' (length=5) [...]:19:string '(<a' (length=3) [...]:20:string '</a>)' (length=5) [...]:19:string '(<a' (length=3) [...]:20:string '</a>)' (length=5) [...]:19:string '(depuis le <time' (length=16) [...]:20:string '</time>)' (length=8) [...]:19:string '(<time' (length=6) [...]:20:string '</time>)' (length=8) [...]:19:string '(<time' (length=6) [...]:20:string '</time>)' (length=8) [...]:19:string '(<time' (length=6) [...]:20:string '</time>)' (length=8) [...]:19:string '(<time' (length=6) [...]:20:string '</time>)' (length=8) [...]:19:string '(<time' (length=6) [...]:20:string '</time>)' (length=8) [...]:19:string '(consulté le <time' (length=19) [...]:20:string '</time>)' (length=8) [...]:19:string '(consulté le <time' (length=19) [...]:20:string '</time>)' (length=8) [...]:19:string '(consulté le <time' (length=19) [...]:20:string '</time>)' (length=8) [...]:19:string '(<a' (length=3) [...]:20:string '</a>)' (length=5) [...]:19:string '(<a' (length=3) [...]:20:string '</a>)' (length=5) [...]:19:string '(consulté le <time' (length=19) [...]:20:string '</time>)' (length=8) [...]:19:string '(<a' (length=3) [...]:20:string '</a>, consulté le <time</time>)' (length=32) [...]:19:string '(consulté le <time' (length=19) [...]:20:string '</time>)' (length=8) [...]:19:string '(consulté le <time' (length=19) [...]:20:string '</time>)' (length=8) [...]:19:string '(consulté le <time' (length=19) [...]:20:string '</time>)' (length=8)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 137 Messages

11 juin 2022, 21:43

Mais j'obtiens moi:

Code : Tout sélectionner

string(3) "()" string(3) "()" string(3) "()" string(3) "()" string(3) "()" string(3) "()" string(16) "(depuis le )" string(6) "()" string(6) "()" string(6) "()" string(6) "()" string(6) "()" string(19) "(consulté le )" string(19) "(consulté le )" string(19) "(consulté le )" string(3) "()" string(3) "()" string(19) "(consulté le )" string(3) "(, consulté le )" string(19) "(consulté le )" string(19) "(consulté le )" string(19) "(consulté le )"
Ce qui n'est pas ce que je recherche exactement. Je précise que je sous PHP7.4 (Laragon).

Et je me demande donc ce qui ne va pas ???