Php + recuperer une chaine entre 2 balises

[Résolu/Fermé]
Signaler
Messages postés
224
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
12 août 2011
-
Messages postés
2
Date d'inscription
lundi 27 décembre 2010
Statut
Membre
Dernière intervention
4 août 2015
-
Bonjour,

Je cherche une fonction en PHP capable de renvoyé une chaine de caractere situé entre 2 balise dans une autre chaine.
Exemple:

Debutdetexte[MaBalise]TexteArecuperer/MaBalise2finDuTexte

La fonction me permettrai de recuper TexteArecuperer

Merci d'avance
A voir également:

11 réponses

Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
111
Comment le lien est-il repérable dans le texte qui est extrait de la base de données ? Il est précédé par ... ? Il est suivi par ... ?

A titre d'exemple, si $text contient "début du texte[début lien]http://192.168.1.2/Procedure/Doc/doc1.txt[fin lien]suite du texte"

Dans ce cas tu peux récupérer le lien par :

$marqueurDebutLien = "[début lien]";
$debutLien = strpos( $text, $marqueurDebutLien ) + strlen( $marqueurDebutLien );
$marqueurFinLien = "[fin lien]";
$finLien = strpos( $text, $marqueurFinLien );
$leLien = substr( $text, $debutLien, $finLien - $debutLien );

Je te laisse le soin de comprendre ce bout de script en :
- lisant la doc php pour les fonctions appelées
- intercalant des echo pour voir le résultat de chaque fonction
19
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
224
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
12 août 2011
86
Parfait sa marche!!!

La version definitive sa donne:
$texte = 'Document de presentatoin: <a href="http://192.168.1.2/procedure/test/doc1.doc">Presentation</a>';
$marqueurDebutLien = '<a href="';
$debutLien = strpos( $texte, $marqueurDebutLien ) + strlen( $marqueurDebutLien );
$marqueurFinLien = '">';
$finLien = strpos( $texte, $marqueurFinLien );
$leLien = substr( $texte, $debutLien, $finLien - $debutLien );

Merci pour ton aide en tout cas.
J'ai crée cette fonction en php qui est capable de renvoyer n'importe quelle string compris entre deux valeurs contenu dans un string. Cette fonction marche avec des balises ou comme dans l'exemple en commentaire:


function GetValue($variable,$textToLookIn,$endString)
{

$isFound=0;
$value="";
$pos = strrpos($textToLookIn,$variable );

$stringToSearchLenght=strlen($variable);
$endStringLenght=strlen($endString);
$textToLookInLenght=strlen($textToLookIn);

$compteur=0;
if ( $pos!="")
{
for( $i=$pos+$stringToSearchLenght;$i<$textToLookInLenght;$i++)
{
// On ajoute caractère par caractère la valeur ainsi que la chaine de fin
$value.=$textToLookIn[$i];

// Si le caractère correspond à l'élément $compteur de la chaine de fin
if( $textToLookIn[$i]==$endString[$compteur])
{
$compteur++;
}
// Sinon on réinitialise le compteur
else $compteur=0;

// La chaine de fin a été atteinte quand le compteur est égale à la longueur de la //chaine de fin
if( $compteur==$endStringLenght)
{
// Pour mettre fin au for
$i=$textToLookInLenght+1;

// On supprime la chaine de fin de la valeur
$value= substr($value, 0, strlen($value)-$endStringLenght);
$isFound=1;
}
}
//Si on a pas trouvé la chaine de fin
if ( $isFound==0)
{
$value="La chaîne de fin n'a pas été atteinte";
}
}
else $value="Variable inéxistante";
return $value;
}


// exemple de chaine de caractère à analyser :
$mystring="prenom=john;nom=doe;email=***@***;";
$value=GetValue("nom=", $mystring,";");// retourne doe
$value=GetValue("nom=", $mystring,";email=***@***;"); //pour plus de précision
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
111
Bonjour,

Ta question n'est pas claire : pourrais-tu préciser stp ?
Messages postés
2
Date d'inscription
lundi 27 décembre 2010
Statut
Membre
Dernière intervention
4 août 2015
1
Un code fait maison adaptable pour tout est encore mieux ;)


function recupValeurEntreBalise($text, $baliseDebut, $baliseFin){
$i = 0;
$ii=0;
$textModif="";
$textFinal=array();
while ( $i < strlen($text) ) {
if( $text[$i]==$baliseDebut ){
while ( $ii < strlen($text) ) {
$textModif = $textModif.$text[$ii];
if( $text[$i]==$baliseFin ){
$textModif = str_replace( array($baliseDebut,$baliseFin), "", $textModif);
array_push($textFinal, $textModif);
$textModif="";
break;
}
$i++;
$ii++;
}
}

$i++;
$ii++;
}
return $textFinal;
}

//Exemple
$texte="Salut, je m'appelle {Arthur}, et j'ai {20}ans. Je suis [developpeur], [designer], [webmaster] ...";
$infos = recupValeurEntreBalise($texte, "{", "}");
$competences = recupValeurEntreBalise($texte, "[", "]");

//Afichage du contenu dans un tableau (array)
print_r($infos);
echo "<br /><br />";
print_r($competences);

echo "<br /><hr /><br />";
//recuperer les valeurs du tableau un par un: (exemple pour l'age)
echo $infos[0].' a '.$infos[1].' ans.';

//et aussi les recuperer dans une boucle..
echo " Il est ";
for ($i = 0; $i < count($competences); $i++){
echo $competences[$i]." ";
}
echo ".";

?>


A-J-Evolution.com
Messages postés
224
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
12 août 2011
86
Voila dans un site intranet j'ai un bouton qui permet d'inserer des liens vers des documents sur le serveur donc mon code genere a un moment un lien qui s'affiche sur le site: sa donne

<a href="http://192.168.1.2/Procedure/Doc/doc1.txt">Texte</a>

La je doit creer un autre bouton permettant de supprimer le document donc faudrai que je recupere le lien vers le document, c'est a dire:
"http://192.168.1.2/Procedure/Doc/doc1.txt".
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
111
Merci,

Tu ne peux pas "récupérer" ce lien car le script php est exécuté sur le serveur pour générer le source HTML.

Il faut inverser ta stratégie en mettant dans ton script qqch comme :

$lien = "http://192.168.1.2/Procedure/Doc/doc1.txt";
echo "<a " . $lien . ">Texte</a>";

plus loin pour le lien de suppression

echo "<a href=...mettre ici url du script de suppression...?urlCible=" . $lien . ">pour supprimer</a>"

Dans le script de suppression tu recevras le paramètre urlCible qui te permettra de faire la suppression.

Bon courage.
Messages postés
224
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
12 août 2011
86
j'y avais deja pencé mais je peux pas faire sa.

En fait si sa marche car je l'affiche pas directement. En fait c'est un site qui affiche des postes un peu comme dans un forum.
Lorsque quelqu'un cree un nouvelle article (Un poste pour un forum), l'article est contenu dans la base de données avec un id, un titre, le contenu, etc. Ces "Liens' que creer mon 1er bouton sont copie dans les articles donc pour le recupererer je fait une requete sql recuperant le contenu grace a l'id.

En code sa donne:

$Req = "select * from table where id=$id"
$ResultReq = $maconnection->query($MaReq);
$UneLigne = $ResultReq->fetch_object();
$Texte= $UneLigne->introtext;
echo $Texte;
Grace a l'echo j'affiche donc tout le contenu de l'article dont le lien.

Se que je voudrai c'est dans la variable $Texte recuperer mon Lien au milieu du contenu de l'article.

En recherchant un peu, j'ai trouvé la fonction preg_match mais je comprend pas tres bien comment elle fonctionne
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
111
Content que ca marche.

Une petite suggestion complémentaire : te protéger contre les erreurs. Par exemple si, pour une raison ou pour une autre, le <a manque.

On regrette toujours de n'avoir pas intégré le traitement des erreurs lorsque une erreur intervient.
Messages postés
224
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
12 août 2011
86
Merci pour le conseil.
De toute facon, je doit maintenant l'integrer au reste de mon code et tester les eventuelles problemes mais sa c'est une autre histoire....
Messages postés
469
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
14 août 2016
31
Salut j'utilse cette commande pour recuperer les url :

$marqueurDebutLien = "[début lien]";     
$debutLien = strpos( $text, $marqueurDebutLien ) + strlen( $marqueurDebutLien );     
$marqueurFinLien = "[fin lien]";     
$finLien = strpos( $text, $marqueurFinLien );     
$leLien = substr( $text, $debutLien, $finLien - $debutLien ); 


ça marche bien pour une seule URL.


Mais j'ai un peu de mal pour la transformer, de façon a ce qu'elle le fasse pour plusieur lien dans le texte, pas seulement un.



J'ai bien tenté de faire un boucle for() afin de repeter cette commande mais le resultat est catastrophique :



for($z=0;$z < $nombrimage;$z++)     
     {    
       
$marqueurDebutLien = '[url]';     
${'debutLien'.$z} = strpos( $commentaire, $marqueurDebutLien , $fin );     
$marqueurFinLien = '[/url]';     
${'finLien'.$z}= strpos( $commentaire, $marqueurFinLien ,$fin );    
${'finLien'.$z} = ${'finLien'.$z}   ;    
${'leLien'.$z} = substr( $commentaire, ${'debutLien'.$z}, ${'finLien'.$z} - ${'debutLien'.$z} );     

$fin = ${'finLien'.$z} ;    
$tableau2[$z] = ${'leLien'.$z} ;     
$tableau2[$z] =  "<a href='$tableau2[$z]'>$tableau2[$z]</a>" ;    

$lesliens = $lesliens.$tableau2[$z];    
     } 


PS : il y a bien marqué "[/url] " avec crochet dans mon code, mais le forum le modifie, normal..

Il s'avere que cela recupere mes url, mais decale le debut et fin des urls
Auriez vous une idée d'ou est mon probleme ?

merci pour votre aide...