Page 1 sur 1

trouver une chaine

Posté : 14 mars 2005, 16:13
par greg01
Bonjour à tous,

j'ai un texte et j'aimerais trouver les chaines de caracteres commençant par 'http' par exemple, existe-t-il une fonction pour cela?
Merci beaucoup !!

Posté : 14 mars 2005, 16:19
par flitox
Oui il en existe une : preg_match_all

Posté : 14 mars 2005, 16:21
par pierre

Code : Tout sélectionner

$chaine="http://biensur.fr" if(eregi("^http",$chaine)) { echo 'la chaîne commence par http'; } else { echo 'la chaîne ne commence pas par http'; }

Posté : 14 mars 2005, 16:36
par flitox
Le problème avec ton code Pierre c'est que ça dit que ça commence par http et la suite?

preg_match_all va récupérer toutes les occurrences commençant par http et avec une expression régulière, il n'y a qu'à récupérer la suite de l'url ;)

Posté : 14 mars 2005, 16:40
par greg01
En fait,
je génère un boucle en Php pour afficher du texte (comme des news) mais j'aimerais y inclure des liens et les repérer automatiquement.
D'ou la détection de la chaine commençant par http pour la remplacer par <a href='variable contenant la chaine détectée'>chaine détectée</a>.

Posté : 14 mars 2005, 16:40
par pierre
oui tu as raison, je n'avais pas vu ton post quand j'ai fait le mien

Posté : 14 mars 2005, 16:44
par flitox
Il y a toujours cette méthode malgré qu'elle soit simpliste :
<?php
//rendre une URL cliquable
$val = ereg_replace("(http://|ftp://)(([[:punct:]]|[[:alnum:]])*)","<a href='\\0' onclick=\"window.open(this.href,'_blank');return false;\">\\0</a>",$val);	

//rendre un email cliquable
$val = ereg_replace("([_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)+)","<a href=mailto:\\0>\\0</a>",$val);
?>

Posté : 14 mars 2005, 16:49
par greg01
Merci celle la je la comprends plus parce qu'avec bidule_match_all.
Si vous aviez un lien vers un cours sur ces fonctions de remplacement ce seait super cool.
Merci en tout cas !

Posté : 14 mars 2005, 16:51
par Invité
Il y a toujours cette méthode malgré qu'elle soit simpliste :
<?php
//rendre une URL cliquable
$val = ereg_replace("(http://|ftp://)(([[:punct:]]|[[:alnum:]])*)","<a href='\\0' onclick="window.open(this.href,'_blank');return false;">\\0</a>",$val);	

//rendre un email cliquable
$val = ereg_replace("([_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)+)","<a href=mailto:\\0>\\0</a>",$val);
?>
Voud pouvez me dire a quoi ça sert les (([[:punct:]]|[[:alnum:]])*) ?

Posté : 14 mars 2005, 16:53
par flitox
http://www.expreg.com/
http://www.phpscripts-fr.net/articles/voir.php?id=158
http://www.yov408.com/articles/Regexp/A ... en_PHP.htm
http://www.siteduzero.com/php/regex1.php

Sur le dernier, tu trouveras dès le début la syntaxe pour rendre une url cliquable. (méthode plus fiable ;))
[[:alnum:]]
Tous les caractères alpha-numériques

[[:alpha:]]
Tous les caractères alphabétiques

[[:blank:]]
Tous les caractères de tabulation et espace

[[:cntrl:]]
Tous les caractères de control

[[:digit:]]
Tous les chiffres décimaux = [0-9]

[[:graph:]]
Tous les caractères imprimables sauf ‘espace’

[[:lower:]]
Tous les caractères en minuscules

[[:print:]]
Tous les caractères affichables

[[:punct:]]
Tous les signes de ponctuation

[[:space:]]
Tous les caractère d’espacement

[[:upper:]]
Tous les caractères majuscules

[[:xdigit:]]
Tous les chiffres hexadécimaux
Une adresse peut être de ce style : http://www.mon_site-perso.fr

punct va dire que l'adresse peut avoir des signes de ponctuation comme le "." et alnum va dire qu'il y a des chiffres et des lettres (logique ;))

Mais comme j'ai dis, c'est la méthode simpliste.

Essaye celle-là :

Code : Tout sélectionner

^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$

Posté : 14 mars 2005, 16:58
par greg01
merci beaucoup à tous les deux ! :P

Posté : 14 mai 2005, 17:04
par Invité
Bonjour.

Je suis débutant en PHP et j'aimerais bien aussi pouvoir rendre les URL et les adresses emails cliquables dans un livre d'or.

L'expression suivante, je l'ai trouvée un peu partout :

Code : Tout sélectionner

<? //rendre une URL cliquable $val = ereg_replace("(http://|ftp://)(([[:punct:]]|[[:alnum:]])*)","<a href='\\0' onclick=\"window.open(this.href,'_blank');return false;\">\\0</a>",$val); //rendre un email cliquable $val = ereg_replace("([_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)+)","<a href=mailto:\\0>\\0</a>",$val); ?>
mais je ne sais absolument pas où la placer dans ma page !

Dans mon livre d'or, j'ai les champs email et site qui reçoivent les adresses ; doit-on les formater d'une manière spécifique pour que le code puisse fonctionner ?
En l'état actuel, voici le formatage :

Code : Tout sélectionner

[...] <? echo $valeurlud["email"]; ?> <? echo $valeurlud["site"]; ?> [...]
Un petit coup de main serait le bienvenu...

Merci.

Posté : 14 mai 2005, 17:05
par Nerva
Bonjour.

Je suis débutant en PHP et j'aimerais bien aussi pouvoir rendre les URL et les adresses emails cliquables dans un livre d'or.

L'expression suivante, je l'ai trouvée un peu partout :

Code : Tout sélectionner

<? //rendre une URL cliquable $val = ereg_replace("(http://|ftp://)(([[:punct:]]|[[:alnum:]])*)","<a href='\\0' onclick=\"window.open(this.href,'_blank');return false;\">\\0</a>",$val); //rendre un email cliquable $val = ereg_replace("([_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)+)","<a href=mailto:\\0>\\0</a>",$val); ?>
mais je ne sais absolument pas où la placer dans ma page !

Dans mon livre d'or, j'ai les champs email et site qui reçoivent les adresses ; doit-on les formater d'une manière spécifique pour que le code puisse fonctionner ? En l'état actuel, voici le formatage :

Code : Tout sélectionner

[...] <? echo $valeurlud["email"]; ?> <? echo $valeurlud["site"]; ?> [...]
Un petit coup de main serait le bienvenu...

Merci.

Posté : 15 mai 2005, 14:54
par Nerva
Voilà, j'ai trouvé ça et ça fonctionne...

Code : Tout sélectionner

<? echo '<a href="mailto:' . $valeurlud["email"] . '">' . $valeurlud["email"] . '</a>'; ?> <? echo '<a href="' . $valeurlud["site"] . '">' . $valeurlud["site"] . '</a>'; ?>