Php + recuperer une chaine entre 2 balises

Résolu/Fermé
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 - 11 févr. 2008 à 10:47
ArthurJ972 Messages postés 2 Date d'inscription lundi 27 décembre 2010 Statut Membre Dernière intervention 4 août 2015 - 4 août 2015 à 09:24
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

croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 113
11 févr. 2008 à 14:19
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
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
11 févr. 2008 à 14:30
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.
7
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
3
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 113
11 févr. 2008 à 11:30
Bonjour,

Ta question n'est pas claire : pourrais-tu préciser stp ?
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ArthurJ972 Messages postés 2 Date d'inscription lundi 27 décembre 2010 Statut Membre Dernière intervention 4 août 2015 1
Modifié par ArthurJ972 le 4/08/2015 à 09:27
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
1
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
11 févr. 2008 à 11:38
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".
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 113
11 févr. 2008 à 11:52
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.
0
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
11 févr. 2008 à 13:19
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
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 113
11 févr. 2008 à 14:33
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.
0
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
11 févr. 2008 à 15:12
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....
0
lezao Messages postés 469 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 14 août 2016 36
Modifié par lezao le 19/07/2010 à 17:46
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...
0