lien cliquable sans bbcode

lien cliquable sans bbcode - PHP - Programmation

Marsh Posté le 19-11-2003 à 20:22:52    

Bonjour a tous,
 
Voila je planche depuis hier sur un probleme qui me coince.
J'ai fait un script qui me convertit les

  • (color=..)texte(/color)
  • (url)URL(/url)
  • (url=url)texte(/url)
  • (img)url_image(/img)

+gras, souligné, italique
 
Mais je penche sur un probleme qui est le fait qu'il puisse y avoir des liens sans le bbcode
cad : blabla http://www.blabla.com blabla
ou blabla www.url.com blabla
 
j'ai bien essayer de convertir les truc du genre ( http://)(?)(/ ) mais ca fou la merde si un premier lien commence par un espace mais qui ne fini pas par un espace.
 
Quel conseil pouvez vous me donner ?
Est ce que ca peut se faire en php ? en js ?


Message édité par bodbod le 20-11-2003 à 19:55:04
Reply

Marsh Posté le 19-11-2003 à 20:22:52   

Reply

Marsh Posté le 19-11-2003 à 21:01:28    

bodbod a écrit :

Bonjour a tous,
 
Voila je planche depuis hier sur un probleme qui me coince.
J'ai fait un script qui me convertit les

  • (color=..)texte(/color)
  • (url)URL(/url)
  • (url=url)texte(/url)
  • (img)url_image(/img)

+gras, souligné, italique
 
Mais je penche sur un probleme qui est le fait qu'il puisse y avoir des liens sans le bbcode
cad : blabla http://www.blabla.com blabla
ou blabla www.url.com blabla
 
j'ai bien essayer de convertir les truc du genre ( http://)(?)(/ ) mais ca fou la merde si un premier lien commence par un espace mais qui ne fini pas par un espace.
 
Quel conseil pouvez vous me donner ?
Est ce que ca peut se faire en php ? en js ?


 
Comment ca ?

Reply

Marsh Posté le 19-11-2003 à 21:12:38    

Xam_Orpheus a écrit :


 
Comment ca ?


Bonsoir  :hello:  
 
En fait je recupere une donnée dans ma table sql que j'affiche avec un echo.
Avant l'echo, je fais le traitement de la variable.
Tout marche bien quand on met le bbcode mais si il y a un lien il est compris comme texte.
En fait je veux remplacer

Code :
  1. http://www.hdf.fr par <a href=htpp://www.hdf.fr>http://www.hdf.fr</a>


 
C'est mieux ?
 
J'ai bien un truc du meme genre ici mais ca marche pas
http://forum.hardware.fr/forum2.ph [...] h=&subcat=

Reply

Marsh Posté le 19-11-2003 à 22:11:12    

Vi vi j'ai bien compris le but, mais c'est cette histoire d'espace dont tu parles que je comprend pas ;)

Reply

Marsh Posté le 19-11-2003 à 23:48:03    

dans le topic des développeurs de forums, on a du aborder cette fonctionnalité:
http://forum.hardware.fr/forum2.ph [...] h=&subcat=


---------------
༼ つ ◕_◕ ༽つ
Reply

Marsh Posté le 20-11-2003 à 05:33:36    

$search = "#(^|[\r\n\s\]\>])(([\w]+:\/\/)|(www))([^ \n\r\<\[]+)#i;
 
$replace = "\\1<a href=\"\\3\\4\\5\" target=\"_blank\">\\3\\4\\5</a>";
 
$text = preg_replace( $search, $replace, $text);


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 20-11-2003 à 15:52:44    

Freekill a écrit :

$search = "#(^|[\r\n\s\]\>])(([\w]+:\/\/)|(www))([^ \n\r\<\[]+)#i;
 
$replace = "\\1<a href=\"\\3\\4\\5\" target=\"_blank\">\\3\\4\\5</a>";
 
$text = preg_replace( $search, $replace, $text);


ca marche bien pour les http mais y a un probleme pour les www car ca devient http://www.monsite.com/dossier/www.hdf.fr

Reply

Marsh Posté le 20-11-2003 à 16:33:26    

C'est quoi ton lien de départ ?

Reply

Marsh Posté le 20-11-2003 à 16:51:20    

le lien www.ifrance.com/moulindecouche
se transforme en http://www.bodbod.com/dossier/www.ifrance.com/moulindecouche


Message édité par bodbod le 20-11-2003 à 16:52:30
Reply

Marsh Posté le 20-11-2003 à 17:52:04    

Ah oui, c'est parce que comme il n'y a pas de http://, c'est interprété par le browser comme un lien relatif à ton site et non pas un lien global.
 
Vu que dans un cas faut rajouter le "http://" et pas dans l'autre, on ne peut pas faire tout en une seule expression régulière (ou alors c'est encore plus compliqué, ca je sais pas faire).
 
Donc faut faire une exp reg pour les liens du type http://quelque chose et une autre pour les www.quelquechose
 
Dans le topic que tu donnes dans ton premier post, forummp3 donne les deux reg exp qu'il faut, je les ait essayé ca marche niquel :)


Message édité par xam_orpheus le 20-11-2003 à 17:52:36
Reply

Marsh Posté le 20-11-2003 à 17:52:04   

Reply

Marsh Posté le 20-11-2003 à 18:53:09    

oui j'avais bien vu comme toi.
 
ligne 43 et 44 :

Code :
  1. $commentaire_modif = preg_replace("(^|\s)(http|https|ftp|mms)\:\/\/([^ !\'\"\(\)\[\]\r\n ]+)","<a href=\"\\2://\\3\" target=\"_blank\" >\\2://\\3</a>", $commentaire_modif);
  2. $commentaire_modif = preg_replace("(^|\s)www\.([^ !\'\"\(\)\[\]\r\n]+)/i","<a href=\"http://www.\\2\" target=\"_blank\">www.\\2</a>", $commentaire_modif);


 
ERREUR

Code :
  1. Warning: Unknown modifier '(' in /home/bodbod/.../bouffe.php3 on line 43
  2. Warning: Unknown modifier 'w' in /home/bodbod/.../bouffe.php3 on line 44


Message édité par bodbod le 20-11-2003 à 18:54:05
Reply

Marsh Posté le 20-11-2003 à 18:56:20    

bodbod a écrit :

le lien www.ifrance.com/moulindecouche
se transforme en http://www.bodbod.com/dossier/www.ifrance.com/moulindecouche

manque le http :)

Reply

Marsh Posté le 20-11-2003 à 19:01:11    

bodbod a écrit :


ERREUR

Code :
  1. Warning: Unknown modifier '(' in /home/bodbod/.../bouffe.php3 on line 43
  2. Warning: Unknown modifier 'w' in /home/bodbod/.../bouffe.php3 on line 44




 
php3 ? Ca vient peut être de là ;)


Message édité par xam_orpheus le 20-11-2003 à 19:01:21
Reply

Marsh Posté le 20-11-2003 à 19:10:11    

Xam_Orpheus a écrit :


 
php3 ? Ca vient peut être de là ;)

j'ai remis l'extension .php et kenini :(

Reply

Marsh Posté le 20-11-2003 à 20:02:41    

De toute facon, le type www et http voir ftp seront amplement suffisant.
Peut peut on faire 3chaine pour eviter les erreurs.
 
Je vais tester ca et je vous tient au courant :

Code :
  1. $texte= preg_replace ("(^|\s)(http\:\/\/)([^ !\'\"\(\)\[\]\r\n ]+)","<a href=\"http://\\3\" target=\"_blank\" >http:\\3</a>",$texte)
  2. $texte= preg_replace ("(^|\s)(ftp\:\/\/)([^ !\'\"\(\)\[\]\r\n ]+)","<a href=\"ftp://\\3\" target=\"_blank\" >ftp://\\3</a>",$texte)
  3. $texte= preg_replace ("(^|\s)(www.)([^ !\'\"\(\)\[\]\r\n ]+)","<a href=\"http://www.\\3\" target=\"_blank\" >www.\\3</a>",$texte)


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 20-11-2003 à 20:13:11    

ben rien de mieux.
 
Warning: Unknown modifier '(' in ....sur les 3 lignes


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 21-11-2003 à 15:54:32    

Reply

Marsh Posté le 23-11-2003 à 14:51:18    

Bon ben si personne ne voit, je vais faire sans tanpis  :(


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 23-11-2003 à 18:21:09    

tient je m'inscruste pour profiter de ce topic sur les BB :)
 
en fait j'ai fait le meme system mais pour les fonts
 
j'arriver pas a recuperer la valeur specifié (pas encore tres rodé sur les regexp
 
j'ai

Code :
  1. $ToPreg=preg_replace('[size=^([0-9])$]', '<font size=\\1>', $ToPreg);

mais ca marche pas et ca m'affiche mon $ToPreg a savoir [.font=7]blabla[/font] :D
 
ptit coup de main, ca doit pas etre compliqué et ca m'aiderai a comprendre :)


Message édité par Profil supprimé le 23-11-2003 à 18:22:25
Reply

Marsh Posté le 23-11-2003 à 18:52:38    

$topreg = preg_replace("#\[size=([0-9])\](.*?)\[/size\]#si",'<font size="$1">$2</font>', $topreg);
 
Il faut echapper les caracteres speciaux, genre [ ou ]. Mettre des delimiteurs ( /regex/ ou bien #regex# ... )
 
edit:
pareil pour bodbod : il n'y a pas de delimiteurs.


Message édité par karamilo le 23-11-2003 à 18:53:45
Reply

Marsh Posté le 23-11-2003 à 20:06:06    

merci c'est niquel mais peu tu explique 2 passages
 
(.*?) et #si

Reply

Marsh Posté le 23-11-2003 à 20:37:59    

. represente n'importe quel caractere
* dit qu'il doit y avoir soit 0 soit plus d'un '.', cad de n'importe quel caractere
? reduit la gourmandise de preg. (.*?) representera toute la chaine jusqu'a trouver la suite ( cad [/size] )
 
# c'est le delimiteur fin
s c'est pour dire que . represente aussi les sauts de ligne
i c'est pour ne pas respecter la casse

Reply

Marsh Posté le 23-11-2003 à 20:48:54    

wow joli
 
merci bien

Reply

Marsh Posté le 23-11-2003 à 20:53:10    

ha wai un dernier truc est ce que [a-zA-Z0-9_.-]+? revient a un .*?
 
bien sur c'est plus court mais je voudrait juste savoir si c'est equivalent

Reply

Marsh Posté le 23-11-2003 à 20:58:07    

non c'est pas equivalent
parce que . represente aussi ~#('à)é= et tous les caracteres speciaux et tous les espaces ( tab ... )
en plus d'un cote tu as + et de l'autre * ...
+ = au moins 1
* = au moins 0

Reply

Marsh Posté le 23-11-2003 à 21:02:59    

okay :jap:

Reply

Marsh Posté le 23-11-2003 à 22:47:06    

karamilo a écrit :

$topreg = preg_replace("#\[size=([0-9])\](.*?)\[/size\]#si",'<font size="$1">$2</font>', $topreg);
 
Il faut echapper les caracteres speciaux, genre [ ou ]. Mettre des delimiteurs ( /regex/ ou bien #regex# ... )
 
edit:
pareil pour bodbod : il n'y a pas de delimiteurs.


Bon alors, je tente un essai

Code :
  1. $commentaire_modif = preg_replace("#(^|\s)(http|https|ftp|mms)\:\/\/(\[^ !\'\"\(\)\[\]\r\n \]+)#","<a href=\"\\2://\\3\" target=\"_blank\" >\\2://\\3</a>", $commentaire_modif);
  2.  
  3.   $commentaire_modif = preg_replace("#(^|\s)www\.(\[^ !\'\"\(\)\[\]\r\n\]+)/i#","<a href=\"http://www.\\2\" target=\"_blank\">www.\\2</a>", $commentaire_modif);


J'ai bon ou pas ?


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 24-11-2003 à 09:54:39    

ben moi j'ai fait  
 

Code :
  1. $ToPreg=preg_replace('#\[url=(http|https|ftp|mms)(\:\/\/[a-zA-Z0-9_.-]+.[a-zA-Z0-9]+)\](.*?)\[/url\]#si', '<a href="$1$2">$3</a>', $ToPreg);
  2. $ToPreg=preg_replace('#\[url=([a-zA-Z0-9_.-]+.[a-zA-Z0-9_.-]+.[a-zA-Z0-9]+)\](.*?)\[/url\]#si', '<a href="http://$1">$2</a>', $ToPreg);


 
dans le premier cas si http...est specifié et dans le deuxieme si on a juste www. ou n'importe quel autre sous domaine
 
ca marche nickel

Reply

Marsh Posté le 24-11-2003 à 10:27:27    

chacal_one333 a écrit :

ben moi j'ai fait  
 

Code :
  1. $ToPreg=preg_replace('#\[url=(http|https|ftp|mms)(\:\/\/[a-zA-Z0-9_.-]+.[a-zA-Z0-9]+)\](.*?)\[/url\]#si', '<a href="$1$2">$3</a>', $ToPreg);
  2. $ToPreg=preg_replace('#\[url=([a-zA-Z0-9_.-]+.[a-zA-Z0-9_.-]+.[a-zA-Z0-9]+)\](.*?)\[/url\]#si', '<a href="http://$1">$2</a>', $ToPreg);


 
dans le premier cas si http...est specifié et dans le deuxieme si on a juste www. ou n'importe quel autre sous domaine
 
ca marche nickel


OK mais d'apres ce que je vois, on est obligé de passeé par  
(url...  (/url)   //mettre [] a la place de ()
Et c'est sans ce code que je voudrait qu'il me change le lien en lien cliquable.


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 24-11-2003 à 11:26:23    

tu veut dire un lien tout bete genre http://mal.tete.com sans les balise autour?

Reply

Marsh Posté le 24-11-2003 à 22:23:34    

chacal_one333 a écrit :

tu veut dire un lien tout bete genre http://mal.tete.com sans les balise autour?

Oui.
 
Car vu que le texte se trouve dans la bdd, avec un echo, ca ressort le paragraphe en texte brut meme s'il y a des liens.


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 25-11-2003 à 06:47:13    

Code :
  1. $ToPreg=preg_replace('#(http|https|ftp|mms)(\:\/\/[a-zA-Z0-9_.-]+.[a-zA-Z0-9]+)#si', '<a href="$1$2">$12</a>', $ToPreg);
  2.   $ToPreg=preg_replace('#([a-zA-Z0-9_.-]+.[a-zA-Z0-9_.-]+.[a-zA-Z0-9]+)#si', '<a href="http://$1">$1</a>', $ToPreg);


 
[:spamafote]
 
enfin test voir chui pas un chef des regexp


Message édité par Profil supprimé le 25-11-2003 à 06:47:34
Reply

Marsh Posté le 25-11-2003 à 23:06:20    

Bon alors, ca part d'un bon principe mais le probleme c'est qu'il faudrait verifié ce qu'il y a juste devant http: car ca le remplace en boucle.
 
Pour la deuxieme, c'etait pas plutot ca ?
$ToPreg=preg_replace('#(www\.)([a-zA-Z0-9_.-]+.[a-zA-Z0-9_.-]+.[a-zA-Z0-9]+)#si', '<a href="http://$2">$2</a>', $ToPreg);


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 26-11-2003 à 08:05:51    

ben non c'est pas forcement www, ca peu etre un autre sous domaine

Reply

Marsh Posté le 26-11-2003 à 09:19:42    

chacal_one333 a écrit :

ben non c'est pas forcement www, ca peu etre un autre sous domaine

ah ok, les sous domaine du genre forum.hardware.com ;)
 
Bon je vais voir.
Et pour le premiere.
Euh au fait, c'est pareil
 
essai => erreur 500


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed