Accueil > > > EQUIVALENT DE INNERHTML JAVASCRIPT, MAIS GLOBAL
EQUIVALENT DE INNERHTML JAVASCRIPT, MAIS GLOBAL
Information sur la source
Description
Cette fonction renvoie un tableau du contenu de toutes les occurrences d'une balise, HTML ou non, de la chaîne de caractères passée en paramètre. Ce tableau de contenu possède deux indices $Result[Ligne][Colonne]. Le nombre de colonnes par ligne peut soit être fixé par un nombre, soit être déterminé par une valeur, prise en compte ou non dans $Result, marquant le début de chaque ligne. J'ai écrit cette fonction car j'en ai une autre qui, après requêtage SQL, me renvoie le code HTML du résultat en <TABLE>. Mais, pour des raisons de formatage de certaines valeurs, il me fallait récupérer le contenu des <TD>.
Source
- <?php
- function InnerHTML($HTML,$Balise,$Prem_val='',$Affiche_prems=true,$Nbre_bal=0)
- {
- /*
- $HTML contient le code html contenant la table dont on veut extraire la valeur des cellules
-
- $Balise correspond à la balise dont on veut extraire le contenu.
- Ne pas mettre les "<" et ">".
- CONTRAINTE : dans le code HTML, la balise doit être collée à "<"
- <td... est correct et < td... ne l'est pas.
-
- $Prem_val correspond à la valeur qui est prise pour déterminer une nouvelle ligne.
- InnerHTML est INSENSIBLE à la casse concernant $Prem_val. Pour changer cela remplacer les stripos par strpos.
-
- $Affiche_prems permet d'inclure (true) ou non (false) dans le tableau d'extraction $Prem_val si cette option est prise.
-
- $Nbre_bal détermine le nombre de contenus de balise composant une ligne.
- Si $Prem_val et $Nbre_bal sont renseignés, c'est $Prem_val qui prime.
-
- Si $Nbre_bal est supérieur à 0, $Affiche_prems est toujours true
-
- Sachant qu'entre <td> et </td> il peut y avoir en théorie n'importe quoi (autres balises, saut de ligne...), on ne peut pas utiliser <td>([[:alnum:]]+)</td> pour le masque
-
- Si on utilise <td>(.+)</td> ça ne marche pas non plus car la partie extraite dans un preg_match_all sera celle comprise entre le premier <td> et le dernier </td>.
- Tous les autres couples <td>...</td> ne seront pas pris en compte.
-
- On décompose donc l'extraction.*/
-
- if(strlen($Prem_val)===0)//On va extraire les valeurs par nombre de ligne
- { //==>Si $Nbre_bal n'est pas renseigné il faut qu'il soit supérieur à 0
- $Affiche_prems=true; //par contre, s'il est renseigné on garde la valeur passée en paramètre.
- if($Nbre_bal===0) $Nbre_bal=1;
- }
- else//Cela signifie que on va extraire les ligne par une valeur
- {
- $Nbre_bal=0;//Si $Nbre_bal a malencontreusement été renseigné en même temps que $Prem_val,
- }//On remet cette variable à 0 pour que l'extraction par valeur soit détectée (confère **)
-
- $Compteur=$Nbre_bal+1;
- preg_match_all('~<'.$Balise.'[^>]*>~is',$HTML,$Deb_balise);
-
- foreach($Deb_balise[0] as $Val)
- {
- $Val=substr($HTML,strpos($HTML,$Val)+strlen($Val));//On enlève tout ce qu'il y a avant le <td> y compris ce dernier
- $Temp=substr($Val,0,stripos($Val,'</'.$Balise.'>'));
- $HTML=substr($HTML,stripos($HTML,'</'.$Balise.'>')+strlen($Balise));//On supprime le code <td>...</td> que l'on vient d'extraire
- $Taille=count($Recup)-1;
-
- if($Nbre_bal>0)//**On traite une ligne par nombre de balise)
- {
- if($Compteur<$Nbre_bal)
- {
- $Recup[$Taille][]=$Temp;
- ++$Compteur;
- }
- else
- {
- $Recup[$Taille+1][]=$Temp;
- $Compteur=1;
- }
- }
- else//Par valeur de balise commune
- {
- if($Taille===-1)$Taille=0;//C'est que $Prem_val n'est pas en première position
-
- if(stripos($Temp,$Prem_val)===false)
- {
- if(count($Recup[$Taille])===0)
- {
- $Taille2=0;
- }
- else
- {
- $Taille2=count($Recup[$Taille])-1;
- }
-
- if($Recup[$Taille][$Taille2]===NULL)
- {
- $Recup[$Taille][$Taille2]=$Temp;
- }
- else
- {
- $Recup[$Taille][]=$Temp;
- }
- }
- else
- {
- if($Compteur==1)
- {
- $Compteur=0;
- }
- else
- {
- $Compteur=$Taille+1;
- }
-
- if($Affiche_prems===true)
- {
- $Recup[$Compteur][]=$Temp;
- }
- else
- {
- $Recup[$Compteur][]=NULL;
- }
- /*
- if($Compteur==1)
- {
- $Compteur=0;
- }
- else
- {
- $Compteur=$Taille+1;
- }
-
- Pour pouvoir insérer des contenus de balise se trouvant avant $Prem_val si cette valeur n'est pas en première position,
- on a forcé la taille à 0.
- Si $Prem_val est en première position dans le tableau renvoyé dans $Deb_balise[0] alors $Taille, au lieu d'être à 0 sera à 1
- Pour corriger cela on fait tourner le $Compteur.
- Ainsi, si la première valeur de $Deb_balise[0] est égale à $Prem_val, le premier indice du tableau de résultat sera 0.
- */
- }
- ++$Compteur;
- }
- }
- return $Recup;
- }
- ?>
<?php
function InnerHTML($HTML,$Balise,$Prem_val='',$Affiche_prems=true,$Nbre_bal=0)
{
/*
$HTML contient le code html contenant la table dont on veut extraire la valeur des cellules
$Balise correspond à la balise dont on veut extraire le contenu.
Ne pas mettre les "<" et ">".
CONTRAINTE : dans le code HTML, la balise doit être collée à "<"
<td... est correct et < td... ne l'est pas.
$Prem_val correspond à la valeur qui est prise pour déterminer une nouvelle ligne.
InnerHTML est INSENSIBLE à la casse concernant $Prem_val. Pour changer cela remplacer les stripos par strpos.
$Affiche_prems permet d'inclure (true) ou non (false) dans le tableau d'extraction $Prem_val si cette option est prise.
$Nbre_bal détermine le nombre de contenus de balise composant une ligne.
Si $Prem_val et $Nbre_bal sont renseignés, c'est $Prem_val qui prime.
Si $Nbre_bal est supérieur à 0, $Affiche_prems est toujours true
Sachant qu'entre <td> et </td> il peut y avoir en théorie n'importe quoi (autres balises, saut de ligne...), on ne peut pas utiliser <td>([[:alnum:]]+)</td> pour le masque
Si on utilise <td>(.+)</td> ça ne marche pas non plus car la partie extraite dans un preg_match_all sera celle comprise entre le premier <td> et le dernier </td>.
Tous les autres couples <td>...</td> ne seront pas pris en compte.
On décompose donc l'extraction.*/
if(strlen($Prem_val)===0)//On va extraire les valeurs par nombre de ligne
{ //==>Si $Nbre_bal n'est pas renseigné il faut qu'il soit supérieur à 0
$Affiche_prems=true; //par contre, s'il est renseigné on garde la valeur passée en paramètre.
if($Nbre_bal===0) $Nbre_bal=1;
}
else//Cela signifie que on va extraire les ligne par une valeur
{
$Nbre_bal=0;//Si $Nbre_bal a malencontreusement été renseigné en même temps que $Prem_val,
}//On remet cette variable à 0 pour que l'extraction par valeur soit détectée (confère **)
$Compteur=$Nbre_bal+1;
preg_match_all('~<'.$Balise.'[^>]*>~is',$HTML,$Deb_balise);
foreach($Deb_balise[0] as $Val)
{
$Val=substr($HTML,strpos($HTML,$Val)+strlen($Val));//On enlève tout ce qu'il y a avant le <td> y compris ce dernier
$Temp=substr($Val,0,stripos($Val,'</'.$Balise.'>'));
$HTML=substr($HTML,stripos($HTML,'</'.$Balise.'>')+strlen($Balise));//On supprime le code <td>...</td> que l'on vient d'extraire
$Taille=count($Recup)-1;
if($Nbre_bal>0)//**On traite une ligne par nombre de balise)
{
if($Compteur<$Nbre_bal)
{
$Recup[$Taille][]=$Temp;
++$Compteur;
}
else
{
$Recup[$Taille+1][]=$Temp;
$Compteur=1;
}
}
else//Par valeur de balise commune
{
if($Taille===-1)$Taille=0;//C'est que $Prem_val n'est pas en première position
if(stripos($Temp,$Prem_val)===false)
{
if(count($Recup[$Taille])===0)
{
$Taille2=0;
}
else
{
$Taille2=count($Recup[$Taille])-1;
}
if($Recup[$Taille][$Taille2]===NULL)
{
$Recup[$Taille][$Taille2]=$Temp;
}
else
{
$Recup[$Taille][]=$Temp;
}
}
else
{
if($Compteur==1)
{
$Compteur=0;
}
else
{
$Compteur=$Taille+1;
}
if($Affiche_prems===true)
{
$Recup[$Compteur][]=$Temp;
}
else
{
$Recup[$Compteur][]=NULL;
}
/*
if($Compteur==1)
{
$Compteur=0;
}
else
{
$Compteur=$Taille+1;
}
Pour pouvoir insérer des contenus de balise se trouvant avant $Prem_val si cette valeur n'est pas en première position,
on a forcé la taille à 0.
Si $Prem_val est en première position dans le tableau renvoyé dans $Deb_balise[0] alors $Taille, au lieu d'être à 0 sera à 1
Pour corriger cela on fait tourner le $Compteur.
Ainsi, si la première valeur de $Deb_balise[0] est égale à $Prem_val, le premier indice du tableau de résultat sera 0.
*/
}
++$Compteur;
}
}
return $Recup;
}
?>
Conclusion
Un petit exemple: $HTML='<table border="1"> <tr> <td width="463"> <p>ID</p><dd> fgfg</dd> </td> <td width="463"> <p>a</p> </td> <td width="463"> <p>1</p> </td> <td width="463"> <p>Lu ndi</p> </td> </tr> <tr> <td width="463"> <p>ID</p> </td> <td width="463"> <p>b</p> </td> <td width="463"> <p>2</p> </td> <td width="463"> <p>Mardi</p> </td> </tr> <tr> <td width="463"> <p>ID</p> </td> <td width="463"> <p>c</p> </td> <td width="463"> <p>3</p> </td> <td width="463"> <p>Mercredi</p> </td> </tr> <tr> <td width="463"> <p>ID</p> </td> <td width="463"> <p>d</p> </td> <td width="463"> <p>4</p> </td> <td width="463"> <p>Jeudi</p> </td> </tr> <tr> <td width="463"> <p>ID</p> </td> <td width="463"> <p>e</p> </td> <td width="463"> <p>5</p> </td> <td width="463"> <p>Vendredi</p> </td> </tr> <tr> <td width="463"> <p>ID</p> </td> <td width="463"> <p>f</p> </td> <td width="463"> <p>6</p> </td> <td width="463"> <p>Samedi</p> </td> </tr> </table>';
$Cell=InnerHTML($HTML,'td','id') ; print_r($Cell) donnera
Array ( [0] => Array ( [0] => <p>ID</p><dd> fgfg</dd> [1] => <p>a</p> [2] => <p>1</p>
[3] => <p>Lu ndi</p> )
[1] => Array ( [0] => <p>ID</p> [1] => <p>b</p> [2] => <p>2</p> [3] => <p>Mardi</p>
)
[2] => Array ( [0] => <p>ID</p> [1] => <p>c</p> [2] => <p>3</p> [3] => <p>Mercredi</p> )
[3] => Array ( [0] => <p>ID</p>
[1] => <p>d</p> [2] => <p>4</p> [3] => <p>Jeudi</p> )
[4] => Array ( [0] => <p>ID</p> [1] => <p>e</p>
[2] => <p>5</p> [3] => <p>Vendredi</p> )
[5] => Array ( [0] => <p>ID</p> [1] => <p>f</p> [2] => <p>6</p>
[3] => <p>Samedi</p> )
)
$Cell=InnerHTML($HTML,'p','',false,10); prin t_r($Cell) donnera
Array ( [0] => Array ( [0] => ID [1] => a [2] => 1 [3] => Lu ndi [4] => ID [5] => b [6] => 2 [7] => Mardi [8] => ID [9] => c )
[1] => Array ( [0] => 3 [1] => Mercredi [2] => ID [3] => d [4] => 4 [5] => Jeudi [6] => ID [7] => e [8] => 5 [9] => Vendredi )
[2] => Array ( [0] => ID [1] => f [2] => 6 [3] => Samedi )
)
Historique
- 22 juillet 2008 06:16:58 :
- Optimisation du code suivant les conseils de Kankrelune
Sources du même auteur
Sources de la même categorie
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBERÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE Le code est simple, il permet depuis une url youtube de récupérer son identifiant et de se connecter au serveur de miniatures pour en récupérer les im...
par tefa24600
CONVERTISSEUR DE NOMBRES EN TEXTECONVERTISSEUR DE NOMBRES EN TEXTEQu'est-ce ? Un convertisseur de nombre en texte.
Ses particularités?
- pas de limitation sur la taille du nombre (traitement en string, et non en ...
par macruz
CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECe script php permet, comme son nom l'indique de coder un texte pour remplacer les caractères spéciaux, ou apprendre à comprendre les htmlentities, sp...
par Salva9473
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
php gère les balises html d'un fichier xml [ par 10demon10 ]
Bonjours à tous (et joyeuses fêtes) Voila je voudrai savoir si il est possible qu'une page PHP qui affiche le contenu d'un fichier XML puisse aussi g
Règle montage emailing html / CSS [ par benahmedsoufiane ]
Salut, je suis à la recherche d'information sur les règle de montage d'un mailing (html, css), ce qui passe et ce qui est cassé. Concernant le CSS j
convertir xml en tableau afin extraire les données [ par sexynounours69 ]
Je dois récuperer les données d'un fichier xml: ------------------------------------------------------------------------ <table_structur
Php extraction de donnée [ par isiselo ]
Bonjour, Voilà je vous explique mon problème J'ai un outil sur lequel sont stockés des données xml,je dois récupérer automatiquement ses données XML
Apparition de balises HTML après màj de ma bdd [ par artmaniak ]
Bonjour à tous, Je rencontre un problème lié à la mise à jour de ma base de donnée via une plateforme administrateur[^^mad3]. Tout se passe correcteme
Extraction code source balise [ par aliasdidou ]
Bonjour, Après avoir consulté vos différents codes sources sur le site, pour l'extraction d'un contenu entre des balises, j'en ai retiré le code suiv
Utilisation des touches directionnelles dans un tableau html [ par jagogordonne ]
Bonjour à tous, Je suis à la recherche d'un moyen qui permetterait d'utiliser les touches directcionnelles du clavier dans un tableau HTML. Je m'éxpli
Isolement du contenu de balises html [ par dreamsworks ]
Bonjour, Je cherche un code en php qui me permettrait de faire ceci : J'ai une chaine en entrée du genre : <a href="<span sty
éliminer les balises html [ par hadjiphp ]
Bonjour, merci pour ce site et souhaite de trouver tous ce que je veux. je vous remercie. Bonjour, j'ai une question : j'ai une page web et je
html to xml [ par xxrock ]
Dans le cadre de mon projet(formation à distance adaptative), qui nécessite des jeux de cadre pour que l'auteur puissegénérer des cours( en XML ) ,j'a
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SYSTEME D'AMISYSTEME D'AMI par moza2409
Cliquez pour lire la suite par moza2409
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|