Utilisation des masques

Utilisation des masques - PHP - Programmation

Marsh Posté le 01-12-2005 à 13:35:27    

Hello,
 
Je bute depuis ce matin sur un problème d'un con, mais d'un con !
En fait, les masques (pour utiliser dans un preg_match) et moi, ca fait deux.
J'ai la liste, j'ai les fonctions, mais décidemment, je n'arrive pas à les placer correctement: je suis faché avec la syntaxe.
 
Donc voilà:
je souhaite contrôler la présence d'un lien retour, j'execute donc la vérification du code html correspondant...
Le meilleur résultat que j'ai pu obtenir:
- Si lien retour présent: ca marche, il me le trouve.
- Si lien retour absent: ca marche, il me dit qu'il n'y a rien.
- Si lien retour erroné: ca ne marche pas, il me dit qu'il le trouve quand même :/
 
Voici mon code actuel:

Code :
  1. $retour = "/[^<\/a><a.*?>$]".$_POST['lienretour']."/";


(bien entendu, $retour est inseré après dans le preg_match...)
 
J'imagine qu'il faut aussi préciser de prendre en compte lettres, chiffres, et espaces, mais même avec un [[:print:]], le résultat est le même... Je vais m'arracher les cheveux  :sweat:  
 
Merci pour votre aide !
 
kjb

Reply

Marsh Posté le 01-12-2005 à 13:35:27   

Reply

Marsh Posté le 01-12-2005 à 13:43:46    

C'est n'importe quoi ta pattern :o
Tu cherches la chaine suivante:
la valeur de $_POST['lienretour'] non précédé des caractères suivants: "<", "/", "a", ">", "<", "a", ".", "*", "?", ">"
 
Est ce que tu pourrais montrer exactement une chaine de caractère que tu essayes de récuperer?

Reply

Marsh Posté le 01-12-2005 à 14:01:36    

Hmmm, oui, j'ai voulu d'abord faire une recherche en fait, et je m'etais inspiré d'un exemple qui apparemment fonctionnait...  
D'ou effectivement le n'importe quoi.
Le code que j'avais avant, et qui produisait le même effet, etait le suivant:

Code :
  1. $retour = "/[^[:print:]$]".$_POST['lienretour']."/";


J'avais voulu faire au plus bête, en me disant que ca engloberait tous les caractères necessaires.
La prochaine fois je ne ferais pas de recherche ;p
 
En fait, je veux vérifier la présence du code exact dans une page:

Code :
  1. <a href="http://www.mondomaine.com">Mon site</a>


Actuellement, si le code est exact, le script me confirme sa présence. Si le code est absent, il me confirma sa non-présence. Mais si le code est erroné (par exemple, il manque les www), il me confirme quand même sa présence, alors que logiquement il ne devrait pas le detecter.
 
Voilà, d'ou mon problème de depucelage d'utilisation des masques... :)
 
kjb

Reply

Marsh Posté le 01-12-2005 à 14:14:45    

Ok quelques questions:
- Quelles sont les valeurs possibles de $_POST['lienretour'] ( www.monsite.com, monsite.com, http://monsite.com, http://www.monsite.com)
- Tes balises liens sont-elles toujours aussi réduites? pas d'attribut style ou ce genre de chose?
- Le texte du lien ( ici "Mon site" ) est-il toujours le même?
 
Quoi qu'il en soit en gros ta pattern devra ressembler à ça:

Code :
  1. /<a(.*?)href="$_POST['lienretour']"(.*?)>(.*?)</a>


avec le bémol en fonction des valeurs de $_POST['lienretour']

Reply

Marsh Posté le 01-12-2005 à 14:55:35    

Eh bien en fait, pour être plus précis, j'avais englobé le code entier, et non seulement la variable, dans $_POST['lienretour'], car la variable est présente à 3 endroits différents:

Code :
  1. <a href="http://www.mondomaine.com/VARIABLE.html" target="_blank" title="Site VARIABLE">Site VARIABLE</a>


Aucun attribut de style, ce lien devant se retrouver sur le site de tel ou tel webmaster, et non sur le mien: c'est pour gérer les soumissions à un moteur de recherche (lien présent: validé; lien non présent: refusé).
Pourquoi cette variable ? Je veux laisser choisir un thème au webmaster.
 
Sur la page de soumission, ce que le webmaster doit faire:
- Generer ce fameux lien retour avec la VARIABLE de son choix.
- Indiquer l'url ou il a placé ce lien retour.
- Valider l'indexation dans le moteur.
 
En me basant sur ton exemple (c'est vrai que j'aurais pu faire comme ca dès le départ, en plus...), j'ai fait logiquement ceci:

Code :
  1. $retour = "/<a(.*?)href=\"http://www.mondomaine.com/".$_POST['lienretour'].".html\"(.*?)target=\"_blank\"(.*?)title=\"Site(.*?)".$_POST['lienretour']."\">Site(.*?)".$_POST['lienretour']."</a>/";


J'obtient alors un Warning: preg_match(): Unknown modifier '/'
J'ai essayé de faire accepter les slash ( ([\/]) ??), mais ca n'a pas eu l'air de fonctionner...
 
kjb

Reply

Marsh Posté le 01-12-2005 à 15:00:17    

backslash les slashs et les points! le target est is obligatoire(je pense pas donc je le vire ;) )?

Code :
  1. /<a(.*?)href="http:\/\/www\.mondomaine\.com\/$tavariable\.html"(.*?)title="Site $tavariable"(.*?)>Site $tavariable<\/a>/


Attention si le title se retrouve avant le href ça marche plus!!!


Message édité par anapajari le 01-12-2005 à 15:01:24
Reply

Marsh Posté le 01-12-2005 à 15:22:59    

Ah effectivement, je ne backslash que les " ...
Mais ca fait 10 minutes que je me coltine un Warning: preg_match(): Unknown modifier 'a' ...  :pt1cable:  
J'ai essayé de jouer avec les guillemets, j'ai verifié et reverifié, rien n'y fait ;D
 
kjb

Reply

Marsh Posté le 01-12-2005 à 15:54:15    

t'as pas du backslasher le dernier / dans "</a>"

Reply

Marsh Posté le 01-12-2005 à 16:00:10    

faut aussi
 
\<
 
\>
 
 
il me semble


Message édité par art_dupond le 01-12-2005 à 16:00:40
Reply

Marsh Posté le 01-12-2005 à 17:03:55    

anapajari a écrit :

t'as pas du backslasher le dernier / dans "</a>"


Aaaaaaaah misère de misèreuuuuuu.
 
Effectivement, après avoir passé mon après-midi sur ce satané bout de code, et surtout après m'être detendu un peu avec un need for speed, le truc tout con se montre de lui-même tout seul... J'avais bien zappé le dernier slash dans la fermeture de balise.
 
Un grand merci à toi anapajari, tu m'ôtes un sacrée épine du pied  :jap:  
Et gracias aussi à art_dupond !
 
Allez hop, bonne soirée  :hello:  
 
kjb

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed