Reconnaissance automatique d'une chaine en ph

Résolu/Fermé
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 - 2 avril 2008 à 17:56
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 - 3 avril 2008 à 17:53
Bonjour,

Voici une question assez bête je suppose (encore une fois) :

- comment faire pour détecter automatiquement une adresse url dans une variable php et lui accoler des balises html (pointant vers l'url en question) au moment de l'affichage sur une page ?
Par exemple, l'utilisateur entre un texte " Allez voir sur : http://lien.com ", qui sera enregistré dans ma table MySQL.
Et au final j'aimerais afficher " Allez voir sur : <a href="http://lien.com">http://lien.com</a> ".
(je ne sais pas si preg_match ou sub_str seraient utiles dans ce cas ...)


et question semblable :

- j'aimerais que lorsqu'un utilisateur rentre un nom avec des balises (par exemple : le groupe Slipknot entre en studio), un script récupère le contenu entre les balises et et cherche dans ma table de donnée si ce contenu (un ou plusieurs mots cette fois-ci) est enregistré.


Est ce que vous sauriez quelles fonctions php utiliser pour ces deux cas ? merci !

17 réponses

IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
2 avril 2008 à 18:26
Pour ton premier cas j'ai eu meme soucis , j'ai bricolé un script qui marche chez moi mais je ne peut pas te garantir que ce soit le meilleur moyen de faire :

$html = 'salut , je te conseille d\'aller sur https://www.commentcamarche.net/ parce que c\'est pas mal';

preg_match_all("#http://[a-z0-9.-_]+\.[a-z]{2,4}/#", $html, $matches, PREG_SET_ORDER);

foreach ($matches as $val) {
$html = str_replace($val[0],"<a href='".$val[0]."'>".$val[0]."</a>",$html) ;

}
echo $html;
0
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 2
2 avril 2008 à 19:04
wow j'ai pas tout compris au
#http://[a-z0-9.-_]+\.[a-z]{2,4}/#


mais merci beaucoup, je vais tester ça demain ! (il est 2h du mat chez moi ^^).

Pour la deuxième partie, ça me semble très semblable en tout cas.
Le script a l'air très gourmand (pour la fonction preg_match_all), mais je suppose qu'il n'y a pas d'autre fonction.

Merci ^^
0
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
2 avril 2008 à 20:58
Cette fonction utilise les expression régulieres , je dois admettre que ce n'est pas la technique la plus facile a aborder en php ^^ en réalité c'est tres simple mais il faut connaitre la syntaxe , si ça t'interesse , je t'invite a mater cette page :
https://www.commentcamarche.net/contents/803-php-expressions-regulieres
0
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 2
3 avril 2008 à 09:53
re !

merci pour l'info, je vais regarder de ce côté là.

Ton script marche en effet, mais, il a besoin de deux et uniquement deux slashes, je crains.
S'il n'y a pas le dernier slashe, le lien n'est pas détecté, et s'il y en a trop, il s'arrete avant ...

Bon je vais voir du côté des expressions régulières pour tenter de régler ça merci ^^.
Je te dirais si je trouve quelque chose ... (enfin je sens que ça va vite me dépasser) ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
3 avril 2008 à 11:12
De mon coté je cherche encore a perfectionner ma fonction , on se tiens au courant mutuelement ^^
idleman@idlewave.com
0
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 2
3 avril 2008 à 12:03
oh magnifique !

Alors là tu vas être ravi (et dégouté je crains) :

$html = 'venez manger des cactus sur http://jaime.com/cactus/cunégonde/annoce.php ';

$contenu = preg_replace('!http://[a-z0-9%&=\?;./_-]+!i', '<a href="$0">$0</a>', $_REQUEST['contenu']);
echo $contenu;


Et t'en fais pas, je n'ai même pas lu ce qu'étaient les expressions régulières (oui honte à moi), j'ai simplement un peu plus cherché sur google.


Merci donc à http://www.presence-pc.com/forum/ppc/Programmation/couper-affichage-sujet-2751-1.htm pour son message très précieux (il voulait découper l'affichage de l'url quand celle ci est trop longue).

(purée je suis baba héhé)
0
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 2
3 avril 2008 à 12:07
pardon je suis allé trop vite dans le copier coller, j'ai mal modifié les noms de mes variables :



$contenu = 'venez manger des cactus sur http://jaime.com/cactus/cunegonde/annoce.php';

$contenu = preg_replace('!http://[a-z0-9%&=\?;./_-]+!i', '<a href="$0">$0</a>', $contenu);
echo $contenu;


(mais bon c'est la meme chose ...)
0
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
3 avril 2008 à 12:19
Cette fonction ne marche pas chez moi , mais elle a l'air bien plus simple effectivement .
0
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
3 avril 2008 à 12:21
Ha ben on a posté en meme temp ^^ je vais tester ça tout de suite
0
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
3 avril 2008 à 12:24
ya quand meme un soucis , l'url http://jaime.com/cactus/cunégonde/annoce.php ne s'affiche pas jusqu'au bout :

voir :
http://idlewave.com/config/fonction.php

sinon c'est la grande classe !
0
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
3 avril 2008 à 14:08
D'ailleur meme sur ce fofo ça ne s'affiche pas , on dirais que c'est a cause de l'accent .

EDIT : c'ets bien a cause de l'accent , il faut preciser tous les caracteres speéciaux entres les [] , et on aura un script encore plus performant que sur ce fofo (baleze !!)
0
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 2
3 avril 2008 à 14:36
hum bon bein j'ai peut etre ta solution alors :

$Texte = "Bienvenue sur http://www.commentcamarche.net cher ami";

$Texte = ereg_replace("(http://)((:punct:|:alnum:)*)",
					  "<a href=\"\\0\">\\2</a>",$Texte);



et honte sur nous deux parce que la solution est sur le lien que tu m'as donné concernant les expressions régulières de comment ca marche !!

http://www.commentcamarche.net/php/phpreg.php3
0
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
3 avril 2008 à 14:51
Certe on est vraiment con cela dit cette fonction ne marche pas plus :
http://idlewave.com/config/fonction.php
Les accents bugent aussi .

En revanche avec l'avant derniere fonction que tu a proposée en rajoputant les caracteres speciaux ça marche presque , il y a seulement le lien de redirection qui foire :
http://idlewave.com/config/fonction2.php
0
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 2
3 avril 2008 à 15:12
oui c'est vrai pour les accents, le script est pas parfait, mais des url à accents c'est quand meme une faute non ?

je m'y connais toujours pas en expressions régulières, mais il n'y a pas moyen d'utiliser la fonction php urlencode sur le lien découpé ?


Là j'essaie de détecter les balises
et
pour transformer l'expression contenue en un lien vers le champ recherche, comme comment ca marche, en fait... mais peine perdue, je trouve pas de script, et j'essaie en vain un peu n'importe quoi ...

Est ce que tu sais comment créer une expression régulière pour détecter ces balises et les supprimer ?
Là j'ai quelque chose qui détecte les
et
(je ne sais meme pas pourquoi l'expression s'arrete bien aux
]]
), mais qui les garde affichés, et surtout qui l'inclue dans le mot cherché.

$contenu = preg_replace('!\[\[[a-z0-9[:blank:]%&=\?;./_-]+!i', '<a href="/recherche.php?search=$0">$0</a>', $_REQUEST['contenu']);
echo $contenu;

echo '<form action="test.php">';
echo '<textarea name="contenu" cols="96" rows="5"></textarea>';
echo '<input class="bouton" type="submit" value="Valider">';
echo '</form>';
0
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 2
3 avril 2008 à 15:21
aie aie aie, l'affichage du post est complètement modifié, malgré les balises de code autour des crochets ...


Bon, quoi qu'il en soit, j'ai fait n'importe quoi avec trois neurones, mais suis tombé sur quelque chose qui marche pour ma deuxième question.


$contenu = preg_replace('!\[\[[a-z0-9[:blank:]%&=\?;./_-]+!i', '<a href="/recherche.php?search=$0">$0</a>', $contenu);
echo str_replace(']]','',str_replace('[[','',$contenu));


Alors oui, c'est extrêment moche et n'en suis pas fier du tout mais bon ... ce n'est que ce que j'ai sous la main pour l'instant :-$.

En fait dans l'idéal j'aurais aimé récupérer le mot entre balises (le $0) et vérifier si il correspond à un champ donné d'une table, ou sinon à une autre, et sinon le faire pointer vers la page de recherche.
0
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
3 avril 2008 à 16:07
Ce bug d'affichage est bien lourd! Faut faire click droit avec la souris sur les lignes ça les efface.


Sinon tu a raison pour les accents , c'est une faute mais tant qu'a faire une fonction autant la faire la plus complete possible ^^ , et puis on ne sais jamais , dans un futur lointain ,quand tous les ndd a caracteres normeaux seront pris , les accents seront peut etre acceptés XD
0
Liteulbob Messages postés 37 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 7 août 2008 2
3 avril 2008 à 17:53
oui c'est vrai, bien d'accord.

Bon, je vais m'arrêter sur ces solutions peu satisfaisantes mais qui sont déjà ça ...
en conclusion :


DETECTER LES URL :


-
$contenu = preg_replace('!http://[a-z0-9%&=\?;./_-]+!i', '<a href="$0">$0</a>', $contenu);

ou :
-
$Texte = ereg_replace("(http://)((:punct:|:alnum:)*)", "<a href=\"\\0\">\\2</a>",$Texte);


(mais la reconnaissance de l'adresse s'arrete au premier caractère spécial comme un accent)



DETECTER LES BALISES DOUBLES CROCHETS ET LES TRANSFORMER EN LIEN :

$contenu = preg_replace('!\[\[[a-z0-9[:blank:]%&=\?;./_-]+!i', '<a href="/recherche.php?search=$0">$0</a>', $contenu);
echo str_replace(']]','',str_replace('[[','',$contenu));



sur ce, bonne soirée ;-)
0