[Résolu] Soucis preg_replace et gestion d'url

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Résolu] Soucis preg_replace et gestion d'url

Re: [Résolu] Soucis preg_replace et gestion d'url

par moogli » 01 nov. 2011, 17:48

register_globals sur on
heu non, faut faire les chose proprement, register globals sur on c'est pas bon et pas une solution prenne vu que ce n'est pas une conf par défaut !


@+

Re: Soucis preg_replace et gestion d'url

par Snek » 01 nov. 2011, 17:41

fopen et register_globals sur on et ajout de la class devant la fonction du preg_replace_callback et tout marche impeccable.

Merci encore les gars !! =D>

Re: Soucis preg_replace et gestion d'url

par Snek » 28 oct. 2011, 19:53

register_globals est sur off dans la config php... ca peut jouer ?

Re: Soucis preg_replace et gestion d'url

par Snek » 28 oct. 2011, 19:17

Alors tout d'abord avant de vous en dire plus, je tiens à vous remercier les gars @Moogli @Mazarini !! C'est vraiment super d'avoir pris le temps de m'aider.

Je viens de tester le code en local et visiblement il marche impeccablement. Mais dès que je l'implémente au reste de mon fichier helper, badaboom ca coince.

Re: Soucis preg_replace et gestion d'url

par Mazarini » 28 oct. 2011, 16:12

Il faudrait voir ce que fait :
            $newurl = file_get_contents('http://api.bit.ly/v3/shorten?login=monlogin&apiKey=mykey='.$matches[1].'&format=txt'); /* le résultat de cette appel doit me retourner par ex http://bit.ly/abcdef qui devient ma nouvelle url à remplacer dans le message */
Je soupçonne que $newurl soit vide.
Normalement, ta page est vide, mais en regardant le source HTML, tu dois trouver : <a href="></a> qui ne se voit pas dans le navigateur. A priori, il manque aussi une " lors de la mise en forme de href="....". Cela peut également explique la page blanche.

Edit : return '<a href="'.$http.$newurl.'">'.$newurl.'</a>';

Re: Soucis preg_replace et gestion d'url

par Snek » 28 oct. 2011, 14:26

Bon y'a du mieux puisque même si ma page reste blanche, j'ai ceci qui s'affiche avec une partie du message:

string(56) "http://www.urldemonsite.com/mon-super-article/" [2]=> string(7) "http://" [3]=> string(7) "http://" [4]=> string(0) "" [5]=> string(17) "www.urldemonsite" [6]=> string(4) "www." }

je suppose donc qu'il faut que j'utilise matches[2] afin de remplacer mon url dans mon file_get_contents... mais pageblanche si je vire le var_dump. y'a qu'en remettant preg_replace au lieu de preg_replace_callback et en enlevant ma function replaceur que la page s'affiche correctement.

Re: Soucis preg_replace et gestion d'url

par Mazarini » 28 oct. 2011, 12:24

Bonjour,

Tu devrais remplacer le contenu de ta fonction par un var_dump($matches). Ca te permettrai de voir ce dont tu disposes exactement pour faire le calcul de la nouvelle chaine et de valider ton pattern.

Re: Soucis preg_replace et gestion d'url

par Snek » 28 oct. 2011, 12:15

g juste ouvlié de supprimer "$noFollow = false , $newWindow = false" dans mon copier coller car je ne fais plus appel à ca.

Re: Soucis preg_replace et gestion d'url

par Snek » 28 oct. 2011, 12:08

Voici mon code complet:

Code : Tout sélectionner

static public function replaceURL( $monmessage , $noFollow = false , $newWindow = false ) { if ($monmessage == '') { return ''; } $http=""; if(strpos($monmessage,'www')!==false && strpos($monmessage,'http://')===false){ $http="http://"; } $pattern = "/(((http[s]?:\/\/)|(www\.))(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+|\.[a-z]+(\.[a-z]{2,2})?)\/?[,a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is"; function replaceurl ($matches) { $newurl = file_get_contents('http://api.bit.ly/v3/shorten?login=monlogin&apiKey=mykey='.$matches[1].'&format=txt'); /* le résultat de cette appel doit me retourner par ex http://bit.ly/abcdef qui devient ma nouvelle url à remplacer dans le message */ return '<a href="'.$http.$newurl.'>'.$newurl.'</a>';} $message = preg_replace_callback($pattern, "replaceurl", $monmessage); return $monmessage; }
Je m'attaque surement à un code trop complexe pour mon niveau, mais étant donné que je suis le seul au boulot a pouvoir mettre la main la dedans, un peu d'aide me serait très utile !
Merci encore Moogli :D

Re: Soucis preg_replace et gestion d'url

par moogli » 28 oct. 2011, 11:24

poste le code stp sinon faut jouer aux devinettes ;)

@+

Re: Soucis preg_replace et gestion d'url

par Snek » 28 oct. 2011, 11:14

J'ai beau essayé en respectant la syntax et les exemples données par le manuel, page blanche. Visiblement y'a qq chose que je n'arrive pas à saisir. C'est à s'arracher les cheveux ! #-o

Re: Soucis preg_replace et gestion d'url

par moogli » 27 oct. 2011, 17:55

:mrgreen: :mrgreen: :mrgreen: :mrgreen:

Re: Soucis preg_replace et gestion d'url

par Snek » 27 oct. 2011, 17:52

Re bonjour,

On va tester avec ca mais en voyant le code que tu met, effectivement je cerne un peu mieux l'utilisation. Je croise les doigts !!

Merci

Re: Soucis preg_replace et gestion d'url

par moogli » 27 oct. 2011, 17:50

je dirais plutot
function replaceurl ($match) { file_get_contents('http://convertisseururl.com/?id='.$match[ $index qui correspond à l'url dans le motif ]);}

A tu compris les exemples de la doc de preg_replace_callback ?

tu doit avoir une variable en paramètre de la fonction de rappel.
cette variable contient un tableau correspondant au masque, le zéro c'est la chaine, le 1 la 1ère parenthèse capturante etc etc

a priori, j'ai pas regardé le motif :D, l'index sera 1 dans la fonction que j'ai modifié ci dessus :)

@+

Re: Soucis preg_replace et gestion d'url

par Snek » 27 oct. 2011, 17:39

Bonjour :)

Tout d'abord merci pour cette réponse ! J'étais effectivement sur la bonne voie, mais il me reste un détail que je n'arrive pas à saisir.
En effet je dois récupérer le contenu d'une page qui retourne une url rétrécie en fonction de l'url que j'envoi. Le soucis c'est que lorsque je créé une fonction en amont, que dois-je utiliser pour lui indiquer l'url capturée ? $1 ?

le principe est le suivant:

l'url postée est du type: http://www.monsite.com/monarticle/id-article.html
je dois récupérer le contenu de la page: http://convertisseururl.com/?id=http:// ... ticle.html

et le résultat est quelque chose comme: http://url.ly/abcd

Quelque chose comme ca ? mais visiblement cela ne fonctionne pas. C'est la 1ère fois que je rencontre ce cas de figure :/

Code : Tout sélectionner

$pattern= "/(((http[s]?:\/\/)|(www\.))(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+|\.[a-z]+(\.[a-z]{2,2})?)\/?[,a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is"; function replaceurl () { file_get_contents('http://convertisseururl.com/?id=$1');} $monmessage = preg_replace_callback($pattern, "replaceurl", $monmessage); return $monmessage;
Je pense que mon approche n'est pas la bonne mais je ne vois pas trop.