Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2011, 15h53   #1
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
Par défaut transformer liens relatifs en absolus

bonjour, et bnne année 2011 !

je voulais savoir comment faire pour ajouter un texte dans des liens

j'ai plusieurs liens relatifs de type

Code :
1
2
3
4
5
<a href="dossier/page1.php" title="">le lien</a>
 
<a href="dossier/page2.php" title="">le lien</a>
 
<a href="dossier/page3.php" title="">le lien</a>
je voudrais obtenir des liens de types absolue comme ceci

Code :
1
2
3
4
5
<a href="http://www.lesite.com/dossier/page1.php" title="">le lien</a>
 
<a href="http://www.lesite.com/dossier/page2.php" title="">le lien</a>
 
<a href="http://www.lesite.com/dossier/page3.php" title="">le lien</a>
merci
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 18h38   #2
PBR
Invité régulier
 
Inscription : novembre 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 18
Points : 9
Points : 9
Bonjour,
tu peux peut-être utiliser quelque chose comme :

Code :
1
2
3
4
5
6
7
8
 
 
$url_absolue = "http://www.lesite.com/";
 
$lien_origine = '<a href="dossier/page1.php" title="">le lien</a>';
 
$exp = '#a href="([^(http)])#i';
$lien_ok = preg_replace($exp,'a href="'.$url_absolue.'$1',$lien_origine);
C'est une piste... à adapter selon tes besoins
A++
PBR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 08h52   #3
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
merci pour ta réponse

j'ai une parse error sur cette ligne

Code :
$exp = '#a href="([^(http)])#i';
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 08h56   #4
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

Il manque le point-virgule à la fin de la ligne située au dessus.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 09h27   #5
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
merci Eric2a

et oui je suis idiot , j'avais pas vu ça

ça fonctionne pour l'url
maintenant si je veux que ça marche pour les centaines d'url de type

Code :
1
2
dossier/page2.php
dossier/page3.php etc..
il faudrait dans le type d'url suivant

Code :
 <a href="/dossier/dossiertoto/page.php?var1=toto&var2=titi">le nom du lien"</a>
que je trouve la regex qui va me garder /dossier/ , ajouter le lien en absolue et trouver le motif qui va remplacer tout ce qui est après dossier/ et avant la balise </a>

je cherche mais tout aide et la bienvenue !

et encore merci pour votre aide PBR et Eric2a ( corse du sud ? )
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 11h17   #6
PBR
Invité régulier
 
Inscription : novembre 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 18
Points : 9
Points : 9
Citation:
Envoyé par Eric2a Voir le message
Il manque le point-virgule à la fin de la ligne située au dessus.
Autant pour moi désolé


serna : je ne comprend pas bien ce que tu veux faire ?
Tes urls à "traduire" proviennent d'où ? Une page statique externe ?

Dans ce cas :
Code :
1
2
3
4
5
6
 
$buffer = file_get_contents("url_de_ta_page_de_liens.html");
$url_absolue = "http://www.lesite.com/";
 
$exp = '#a href="([^(http)])#i';
$lien_ok = preg_replace($exp,'a href="'.$url_absolue.'$1',$buffer);
Sinon une redirection gérée par le serveur web serait peut-être plus adpatée par rapport à ce que tu veux faire ?
(pour Apache voir RedirectMatch ou mod_rewrite).
PBR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 12h09   #7
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
les pages proviennent de pages dynamiques externe que je récupère avec Curl. ce sont des news. c'est pourquoi j'ai besoin d'avoir une regex qui dans le type d'url suivant

Code :
 <a href="/dossier/dossiertoto/page.php?var1=toto&var2=titi">le nom du lien"</a>
remplace par un motif la partie suivante

Code :
/dossiertoto/page.php?var1=toto&var2=titi">le nom du lien"
et ça rajoute devant /dossier la chaine suivante
http://www.monsite.com

et avant la fermeture de la balise <a> un target"blank"

par exemple l'url suivante

Code :
 <a href="/dossier/dossiertoto/page.php?var1=toto&var2=titi">le nom du lien"</a>
deviendrait

Code :
 <a href="http://www.monsite.com/dossier/dossiertoto/page.php?var1=toto&var2=titi" target "blank">le nom du lien"</a>
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 17h15   #8
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
il y'a cette fonction ( mais sans le target blank) vu sur un forum

Code :
1
2
3
4
5
6
<?php
define("MON_SITE", "http://www.monsite.com/");
function absolue($url)
{
	return MON_SITE . substr($url, strripos($url, './') + 2);
}
j'essaye de l'appliquer mais sans succès
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 17h27   #9
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
heu y a plus simple ./ est la racine du site
Code :
1
2
3
4
5
6
 
<a href="./dossier/page1.php" title="">le lien</a>
 
<a href="./dossier/page2.php" title="">le lien</a>
 
<a href="./dossier/page3.php" title="">le lien</a>
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 17h37   #10
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
salut Helfima

comme je l'ai posté plus haut je n'ai pas accès aux pages , ce sont des pages dynamiques externe que je récupère avec Curl. je dois appliquer un regex pour automatiser la transformation de lien relatif de ce site en lien absolue
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 17h51   #11
PBR
Invité régulier
 
Inscription : novembre 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 18
Points : 9
Points : 9
et avec cette regexp ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
// en supposant que buffer contient ta chaine a analyser
// pour l'exemple j'utilise :
$buffer = '<a href="/dossier/dossiertoto/page.php?var1=toto&var2=titi">le nom du lien</a>'."\n";
$buffer .= '<a href="/dossier/dossiertoto/page2.php?var1=toto&var2=toto">le nom du lien 2</a>'."\n";
$buffer .= '<a href="/dossier/dossiertoto/page3.php?var1=toto&var2=tata">le nom du lien 3</a>'."\n\n";
 
 
 
$url_absolue = "http://www.lesite.com";
 
$exp = '#(<a href="((.)*)")#i';
$buffer_ok = preg_replace($exp,'<a href="'.$url_absolue.'$2" target="_blank"',$buffer);
PBR est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/01/2011, 18h00   #12
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
bonsoir,


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?php
 
 
$ex = '#(<a href=")(dossier/(.*)")>#';
$absolu= "http://site.fr/";
 
$text= 'un essai <a href="dossier/dossiertoto/page.php?var1=toto&var2=titi">mon test</a> fin du test';
 
echo $text."\n";
echo "<hr/>\n";
 
echo preg_replace($ex, "$1".$absolu."$2 target=\"_blank\">", $text);
 
?>
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/01/2011, 19h03   #13
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
j'ai testé le code de PBR ça marche ! merci beaucoup

cependant j'ai un petit blême concernant le target _blank , en effet je m'aperçois que les nom des liens sont comme ceci
plus d'info " le titre de la news "

exemple je récupère ce genre d'url

Code :
1
2
<a href="/dossier/page.php?var=toto&var2=toto">&gt; Lire " 
la truffe de la semaine "</a>
est ce que les guillemets peuvent jouer dans le fait que cela affiche non pas
la truffe de la semaine
mais j'ai ceci qui s'affiche
> Lire " target="_blank" la truffe de la semaine "

du coup il envoie bien dans la bonne url mais le ciblage target ne fonctionne pas

je teste le code de Ska
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 19h06   #14
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Citation:
Envoyé par serna Voir le message
Corse du sud ?
Oui.

L'expression ci-dessous non testée devrait prendre en compte les balises <a> contenant d'éventuels attributs (style, title, target, ...).


Code :
1
2
3
4
5
$lien_ok=preg_replace(
	'%(?<=<a).+?href="(?!http://)([^"]+)"[^>]*>(.+?)(?=</a>)%si',
	' href="'.$url_absolue.'$1" target="_blank">$2',
	$lien_origine
);
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 19h22   #15
Membre du Club
 
Inscription : juin 2006
Messages : 228
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 228
Points : 51
Points : 51
je viens de tester le code de Ska_root ça marche !

pour le fun je vais tester le code d' Eric2A

encore merci à tous
serna est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h52.


 
 
 
 
Partenaires

Hébergement Web