Page 1 sur 2

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

Posté : 26 oct. 2011, 19:43
par Snek
Bonjour à tous :)

Après avoir passé ma journée à chercher une solution par moi même et sur le web, je viens m'inscrire sur le forum afin de vous exposer mon problème.

Je souhaite rendre cliquable et modifier une url dans un texte soumis par formulaire.
J'arrive donc à garder le texte non url et à rendre cliquable les phrases type http:// etc etc.
Mais impossible de modifier l'url comme je le souhaite.

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"; $monmessage = preg_replace($pattern, " <a href=\"".$http."$1\"".$replace." target=\"_blank\">$1</a>", $monmessage); return $monmessage;
Je souhaiterai réduire mon url avec un code type bit.ly mais impossible de ne récupérer que le ou les liens de mon texte. Y'a t'il un moyen de faire quelque chose dans ce gout la ?

Code : Tout sélectionner

$monmessage = preg_replace($pattern, 'file_get_contents('http://convertisseururl.com/?monurl=$1');', $monmessage);
ou $1 serait mon url à remplacer...

Je débute en code et j'imagine que le $1 n'est pas une variable dans ce cas, mais plutôt quelque chose comme un array. J'imagine aussi qu'on ne peut pas executer une fonction à l'intérieur du preg_replace... (_callback ?)

Je suis perdu ! thank you guyz pour votre aide :)

Re: Soucis preg_replace et gestion d'url

Posté : 27 oct. 2011, 16:30
par moogli
salut,
Je débute en code et j'imagine que le $1 n'est pas une variable dans ce cas, mais plutôt quelque chose comme un array. J'imagine aussi qu'on ne peut pas executer une fonction à l'intérieur du preg_replace... (_callback ?)
le $1 c'est une référence sur ton motif (1ère correspondance capturante).

après je ne vois pas bien le coup du file_get_contents, tu veux récupérer le contenu d'un fichier en fonction du $1 et le mettre dans la chaine de caractère ?

si oui dans ce cas effectivement va falloir utiliser preg_replace_callback pour le faire (avec une fonction, donc dites de rappel, dans lequel tu pourra utiliser file_get_contents sans problème).
regarde dans la doc il y a même un exemple avec les fonctions anonymes.

@+

Re: Soucis preg_replace et gestion d'url

Posté : 27 oct. 2011, 17:39
par Snek
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.

Re: Soucis preg_replace et gestion d'url

Posté : 27 oct. 2011, 17:50
par moogli
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

Posté : 27 oct. 2011, 17:52
par Snek
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

Posté : 27 oct. 2011, 17:55
par moogli
:mrgreen: :mrgreen: :mrgreen: :mrgreen:

Re: Soucis preg_replace et gestion d'url

Posté : 28 oct. 2011, 11:14
par Snek
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

Posté : 28 oct. 2011, 11:24
par moogli
poste le code stp sinon faut jouer aux devinettes ;)

@+

Re: Soucis preg_replace et gestion d'url

Posté : 28 oct. 2011, 12:08
par Snek
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

Posté : 28 oct. 2011, 12:15
par Snek
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

Posté : 28 oct. 2011, 12:24
par Mazarini
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

Posté : 28 oct. 2011, 14:26
par Snek
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

Posté : 28 oct. 2011, 16:12
par Mazarini
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

Posté : 28 oct. 2011, 19:17
par Snek
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

Posté : 28 oct. 2011, 19:53
par Snek
register_globals est sur off dans la config php... ca peut jouer ?