|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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); print_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
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
afficher une longue variable php sur plusieurs lignes dans un tableau html [ par bastiencb ]
je ne parvient pas à ce que les variables trop longues (un texte entier)que j'extrait de ma base de données mysql s'affichent dans un tableau html sur
MySql-Tableau HTML formattée [ par carlitos_brown ]
Bonjour à tous,J'ai une table MySql (composée d'un champ titre et d'autres champs ligne1,ligne 2, ligne 3, etc) sur laquelle je fais une reqûete SELEC
tableau html vers Mysql [ par logbird1 ]
je cherche une fonction qui me permettrais de charger dans une table Mysql un tableau html directement ?qqn a-t-il deja fait cela ?logbird
aide sur php-html [ par inba ]
Voila j'insere des points dans un tableau html.Ces points sont un fichier *.jpeg.Lorsque j'imprime, les points se sont déplacés et la page s'imprime e
tableau dynamique html avec variables php [ par pixelver ]
Bonjour,j'aurais voulu savoir comment si prendre pour gerer un tablaeu html dynamiquement a partir de variable php. j'ai une liste de cours et de date
xml dans un tableau php! SVG à la clé :) [ par jed35 ]
Bonjour je débute en php et évidemment j'ai un probleme. Je cherche à placer des données (qui se trouvent dans un fichier xml) dans un tableau php.voi
Supprimer les balises html d'une chaine de caractère [ par SAaD44 ]
Salut !Voila, je cherche le moyen de supprimer toutes les balises html (de début et de fin) d'une chaine de caractère.Merci d'avance SAâD
Transformation en XML d'un tableau complexe PHP [ par liba ]
J'aimerai pouvoir transformer en XML un tableau complexe PHP différent à chaque fois au point de vue de son architecture (composé des divers éléments,
Tableau HTML et PHP [ par blob54 ]
Salut à tous, Je voulais savoir si c'était possible de récupérer le contenu d'une case d'un tableau HTML dans une variable PHP ?Par exemple, récupére
Comment supprimer ce qui a entre des balises html [ par ImmortalPC ]
Salut,Comment supprimer ce qui a entre les balises <script>ici ce qui as à supprimer</script>Je sais supprimer les balises html mais
|
Téléchargements
Logiciels à télécharger sur le même thème :
|