Reconnaissance automatique d'une chaine en ph [Résolu/Fermé]

Signaler
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
-
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
-
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

Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
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;
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
2
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 ^^
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
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
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
2
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) ...
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
De mon coté je cherche encore a perfectionner ma fonction , on se tiens au courant mutuelement ^^
idleman@idlewave.com
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
2
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é)
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
2
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 ...)
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
Cette fonction ne marche pas chez moi , mais elle a l'air bien plus simple effectivement .
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
Ha ben on a posté en meme temp ^^ je vais tester ça tout de suite
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
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 !
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
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 !!)
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
2
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
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
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
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
2
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>';
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
2
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.
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
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
Messages postés
37
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
7 août 2008
2
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 ;-)