Page 1 sur 1

Pourquoi "nodeValue" (DomDocument) ne fonctionne pas bien quand j'essaie de renvoyer "Alibaba Pictures"

Posté : 09 juin 2022, 16:53
par chegmarco
Bonjour.

J'essaie de remplacer tous les liens (l'attribut href) de toutes les balises a contenant la chaînes de caractères sitecontent du Document (représenté par la variable: $sitecontentTable) par un nouveau URL: href="C:\laragon\www/search.php?term=$term&type=sites":

Code : Tout sélectionner

$get_a_tags = $parser->getElementsByTagName("a"); define( 'BASE_PATH', __DIR__ . '/' ); foreach ($get_a_tags as $get_a_tag) { if (stripos($get_a_tag->getAttribute('href'), "/sitecontent/") !== false) { $get_href_in_a_infobox = $get_a_tag->getAttribute('href'); $term = $get_a_tag->nodeValue; $sitecontentTable = str_ireplace($get_href_in_a_infobox, BASE_PATH."search.php?term=$term&type=sites", $sitecontentTable); } }

Mais le mauvais constat est que au lieu que le paramètre term de l'URL prenne la valeur complète du nodeValue du DomDocument, qui est: Alibaba Pictures, cela retourne: href="C:\laragon\www/search.php?term=Alibaba&type=sites_Pictures".

Et là, vous pouvez remarquer que l'erreur est que le paramètre term retourne SEULEMENT Alibaba au lieu de Alibaba Pictures et le pire c'est que dans le même URL, le paramètre type (qui ne devrait normalement pas être modifié), prend la valeur de _Pictures.

Qu'est va mal dans mon Code ???

Comment corriger mon Code pour que l'attribut href retourne href="C:\laragon\www/search.php?term=$term&type=sites" au lieu de href="C:\laragon\www/search.php?term=$term&type=sites_Pictures" que ça retourne actuellement ???

Merci de m'aider s'il vous plaît.

Re: Pourquoi "nodeValue" (DomDocument) ne fonctionne pas bien quand j'essaie de renvoyer "Alibaba Pictures"

Posté : 10 juin 2022, 08:57
par Spols
Difficile de tester avec le peu de code fourni,

A mon avis c'est $get_href_in_a_infobox qui ne contient pas tout ce qu'il faut.
Affiche le contenu de cette variable et de $term pour comprendre ce qui sera remplacé.
Il me semble que le _pictures apparait car il n'est pas pris en compte dans le remplacement

Re: Pourquoi "nodeValue" (DomDocument) ne fonctionne pas bien quand j'essaie de renvoyer "Alibaba Pictures"

Posté : 10 juin 2022, 10:07
par Dsynx
je suis d'accord avec "Spols" tu dois faire un var_dum sur chaque étape pour analyse le contenu de ce que tu exploite
il est possible que tu exploite un contenu en oubliant un array(dans un array() ) souvant en php tu as petit détail comme cela.
fait un var_dump($get_a_tags) avant le foreach qu'on puisse voir un tête de son contenu même partiel
et aprés est ce que tu as un objet ou un tableau parce que l'un comme l'autre ne s'attaque pas souvent de la même manière en php.
mais je l'avoue parfois je suis étonné que ça fonctionne . bref en temps normal si par exemple dans $get_a_tags c'est un objet qui est produit tu dois avoir une
fonction qui le converti en Array.
bref déjà
étape 1 : tu vérifie le contenu de $get_a_tags var_dump($get_a_tags);
étape 2 : tu appel pas ton élément extrait par Foreach $get_a_tag la seul différence entre $get_a_tags et $get_a_tag c'est un (s) donc il y a confusion et mauvaise lecture pour la maintenance du code donc tu trouve un autre nom comme $element_extract ou $tag je sais pas mais un nommage spécifique différent.
étape 3: tu dois codé avec l'ongle de: php (.) net /manual/fr/function.stripos ouvert h24 pour revérifier chaque fonction que tu utilise avec le moindre détail qu'elle offrent et souvent dans les commentaires plus bas tu peux avoir des solutions
étape 4: fait un var_dump($get_a_tag->getAttribute('href')); avant ton if pour savoir sur quoi travail ton stripos
étape 5: je te conseil de toujours aussi avoir l'onglet : onlinephp (.) io/ ouvert pour tester des petites fonctions comme stripos histoire de vérifier si tu fais bien les choses et ça permet de tester des petit bout de code à chaud
étape 6: faire la même chose pour remonté à la source de ton problème.

PS: si tu es universitaire ou que ton école est reconnu par Github tu peux bénéficier avec JetBrain de PHPstorm et il a l'avantage de de te montrer en live le contenu de tes variables sans faire de var_dump() à se jours pour avoir tester vraiment tout les logiciels pour implémenté du code c'est le plus puissant et il mérite son prix.
mais comme je te l'ai dit via Github et ton université tu peux obtenir toute la suite de Jetbrain avec phpstorm gratuit ça représente 600/700€. voir "GitHub Student Developer Pack" mais il existe d'autre possibilité de gratuité voir les "offres spécial" de jetbrain