Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/02/2007, à 03:05

gene69

[php] est ce qu'on peut faire une expression réguliere plus simple?

bonjour.
j'ai une chaine qui contient des liens relatif  comme celui ci:

<a href="index.php">index</a>

et je voudrai la transformer pour que le lien contienne l'url complete, sachant que malheuresement j'ai des lien lien qui sont déjà parfois déjà complets .

<a href="http://ubuntu-fr.org/">site de référence</a>

Est ce qu'on peut faire plus simple / performant (?) que ceci

<?php //php 4.4
	$pattern ='/href="([^#http:\/\/#^#ftp:\/\/#])/';
	$replacement ='href="http://ubuntu-fr.org/$1';
	
	$str='<a href="index.php">http</a> 
	<a href="http://ubuntu-fr.org">http site</a> 
	<a href="ftp://http://ubuntu-fr.org">ftpsite</a>';

	echo htmlentities(   $str);
	 	 echo '<br/><br/>';
	echo htmlentities( preg_replace( $pattern, $replacement, $str));
?>

Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#2 Le 03/02/2007, à 03:24

gene69

Re : [php] est ce qu'on peut faire une expression réguliere plus simple?

marche pas. l'expression régulire ne teste qu'un seule lettre. On peut pas utiliser des grammaires LR(4)?


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#3 Le 03/02/2007, à 03:52

gene69

Re : [php] est ce qu'on peut faire une expression réguliere plus simple?

voilà j'ai corriger le pattern ... euh j'ai vraiment besoin de savoir si on peu faire plus simple.

$pattern ='/href="([^h]|h[^t]|ht[^t]|htt[^p]|http[^:]|http:[^\/]|http:\/[^\/])/';

Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#4 Le 03/02/2007, à 12:05

naholyr

Re : [php] est ce qu'on peut faire une expression réguliere plus simple?

Pour faire plus simple il faut passer par deux passes :
- une expression régulière très simple (même un str_replace) pour ajouter sans distinction http://.../ devant tous les liens (href=" en href="http://.../)
- une expression règulière simple pour "purifier" les ratés (http://.*(.*?):// en $1://)

Je pense donc que ta solution est plus performante même si moins lisible (c'est l'éternel dilemme du programmeur).

Dernière modification par naholyr (Le 03/02/2007, à 12:05)

Hors ligne

#5 Le 04/02/2007, à 00:45

gene69

Re : [php] est ce qu'on peut faire une expression réguliere plus simple?

J'ai écris une fonction qui me permet de generer un flux rss à partir des actus que j'ai dans la base de données.
Dans mes actus je place des adresses relatives et absolues. Sauf que le validateur du flux rss me demande de ne mettre que des adresses absolues dans le flux.


si je supprime http:// dans les chaines je ne peux pas savoir si j'avais une adresse absolue ou pas.
en fait je voudrais pouvoir détecter :

"href=" ou "src=" suivi du caractere '"' suivi d'une chaine ne commençant pas par  "http://"  ou ne commençant pas par "ftp://" .


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne