Problème BBcode et URL internet

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème BBcode et URL internet

Re: Problème BBcode et URL internet

par Texicitys » 19 oct. 2011, 18:03

Ok, je vais faire comme ça!

Merci beaucoup pour toutes tes réponse très clair et précise!!

Re: Problème BBcode et URL internet

par moogli » 19 oct. 2011, 11:45

il faut que tu regarde la licence du forum, en général c'est écrit au début du fichier php.

la plus part du temps il suffit d'indiquer que le code n'est pas de toi mais de x ou y.

le lien dans la page "de liens" est une bonne idée.


@+

Re: Problème BBcode et URL internet

par Texicitys » 18 oct. 2011, 17:57

J'ai une question.


Plutôt que de créer soit même son bbcode qui est beaucoup de travail et pas très utile. Puis-je prendre le bbcode d'un forum open source et l'implanter dans mon forum fait maison? Si je le fait et que je met le site du forum open source dans ma page liens. Cela suffis?

Merci d'avance de votre réponse!
Tex

Re: Problème BBcode et URL internet

par Texicitys » 17 oct. 2011, 14:11

Le mieux c'est que j'enlève cette ligne?

$text = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $text);

Car elle est trop radicale, elle modifie tout les liens peut importe ou ils se situent ?

Merci

Edit: Je suis tombé sur cet article : http://www.expreg.com/lire-URL-source

Voilà ce que ça propose:
<?php
$texte = 'Bonjour ou bonsoir à toutes et tous,
Vous souhaitez rendre cliquable une ou des urls placées au
travers de vos textes comme celle-ci www.monsite.com.
Vous pourrez également matcher des urls avec leurs
protocoles respectifs à savoir http://www.monsite.com/mondossier/mapage.html ou
ftp://monsite.com, par exemple, ainsi que les url dynamique telle que
http://site.com/regex/page.php?truc=montruc&machin=lemachin et aussi
www.site.com/clicurl.php?truc=montruc&machin=lemachin et www.google.fr';

function clicklien($url){
$in=array(
'`((?:https?|ftp)://\S+[[:alnum:]]/?)`si',
'`((?<!//)(www\.\S+[[:alnum:]]/?))`si'
);
$out=array(
'<a href="$1">$1</a>',
'<a href="http://$1">$1</a>'
);
return preg_replace($in,$out,$url);
}

echo clicklien($texte);
?> 

Ou ça :
<?php

function make_clickable($text)
{
// Les 3 regexp suivant sont issus des forum phpBB
$ret = ' ' . $text;
$ret = preg_replace_callback("!(^|[\n ])(https?://[^ \"\n\r\t<]*)!is", "regexp_http", $ret);
$ret = preg_replace_callback("!(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)!is", "regexp_http", $ret);
$ret = preg_replace_callback("!(^|[\n ])([a-z0-9&\-_.\S]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)!i", "regexp_mail", $ret);
$ret = substr($ret, 1);

return($ret);
}
function shorten($value, $length = 50)
{
if (strlen($value) > $length)
return substr($value , 0, 35 ) . '...' . substr($value , -15);
else
return $value;
}
function regexp_http($value, $http = '', $end = '')
{
if (!preg_match("!^http!", $value[2]))
$http = 'http://';
if (preg_match("!([\.,\?\!]+)$!", $value[2], $match))
{
$end = $match[1];
$value[2] = preg_replace("!([\.,\?\!]+)$!", "", $value[2]);
}
return $value[1] . '<a href="' . $http . $value[2] . '" target="_blank">' . shorten($value[2]) . '</a>' . $end;
}
function regexp_mail($value, $end = '')
{
if (preg_match("!([\.,\?\!]+)$!", $value[2], $match))
{
$end = $match[1];
$value[2] = preg_replace("!([\.,\?\!]+)$!", "", $value[2]);
}
return $value[1] . '<a href="mailto:' . $value[2] . '@' . $value[3] . '">' . shorten($value[2] . '@' . $value[3]) . '</a>' . $end;
}

?> 

ça me parait vraiment pas mal complet!

Re: Problème BBcode et URL internet

par moogli » 17 oct. 2011, 13:57

pour ce qui est de la vérif sur l'image un simple substr sur les 7 premières caractère suffit (+ la comparaison bien entendu) le tout avec la fonction preg_replace_callback() pour faire bonne mesure (comme déjà indiqué) ;)

d'ailleurs le problème dans le deux cas puisse qu'apriori tu à un bbcode pour les liens.

@+

Re: Problème BBcode et URL internet

par Texicitys » 17 oct. 2011, 12:50

Salut à toi!

Merci pour ta réponse!

Désolé si je n'ai pas été très clair, je résume.

J'aimerais que les adresses internet tapée dans le forum (que ça soit www.xxx ou http:// ) soient directement modifiées en lien cliquable.

J'aimerais aussi que dans le bbcode, losque quelqu'un ajoute une image qui nécessite une url, celle ci soit vérifiée et modifier en http:// si elle ne l'est pas encore.

car si quelqu'un tape <img>www.collaide.com</img> cette adresse (www.collaide.com), doit être modifiée en http://www.collaide.com dans la modification.

Car si le lien devient simplement <img src=www.collaide.com />. L'url sera cliquable mais elle mènera à www.monsite.com/www.collaide.com (car il n'y a pas le "http://" devant).

Merci

Re: Problème BBcode et URL internet

par soycd » 17 oct. 2011, 07:31

J'ai pas tout compris, mais 2 choses peuvent t'aider, les références arrières, voir la doc ou encore http://expreg.com/assertion2.php
Et preg_replace_callback(), l'ordre de tes remplacements peut aussi être prépondérant.

Bon courage.

Problème BBcode et URL internet

par Texicitys » 17 oct. 2011, 00:51

Bonjour à tous!

Je suis en train de faire un bbcode.
Cependant j'ai un soucis. J'aimerais que lorsque quelqu'un met un lien http://www.blabla.com, Ce lien sois directement en lien cliquable. J'aimerais aussi que l'on puisse donner un nom a un lien.
Donc, voici le bout de code en question
<?php
// (FR) Lien non précisée
$text = preg_replace('!\<lien\>(.+)\</lien\>!isU', '<a href="$1" target="_blank">$1</a>',$text);
// (FR) Lien préciser
$text = preg_replace('!\<lien url="(.+)">(.+)</lien>!isU', '<a href="$1">$2</a>', $text);
// Lien naturel
$text = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $text);
//images
$text = preg_replace('!\<img\>(.+)\</img\>!isU', '<img src="$1" alt="Image">', $text);
J'ai un problème ici.

Lorsque l'on veut mettre une image, le code est <img><lien>http://blabla.com</lien></img> Mais ce code est, daprès le code ci-dessus, directement modifié en <a href=blabla>... Donc l'image ne sera pas visible vu que le lien donnera <img src="<a href=http://www.blabla....

Je ne sais pas si je suis clair... Mais mes deux code se font conflit. Je ne sais pas comment régler le problème.

J'ai une autre question. Si quelqu'un met <img><lien url="http://www.blabla.com">www.blabla.com</lien></img>, cela ne met pas les http:// devant et donc le lien mène sur http://www.monsite.com/www.blabla.com...

C'est pareil pour la balise lien, [lien url="www.blabla.com"]collaide[/lien] Le lien sera vers <lien url="http://www.monsite.com/www.blabla.com"> ... .com</lien> (car il n'y a pas les http://)

Je me suis dit, pourquoi ne pas regarder si dans le "url=xxx" il y a bien une adresse http://, si il n'y a pas, il faut juste l'ajouté devant, sinon, c'est que le lien est certainement bon.

Ce sont les seules qui ont besoin de cette vérification.

Quel regex utiliser dans ce cas?

Genre 3 regex. Le premier qui regarde pour le text <lien url=xxx> Il y a bien http:// juste après le =. Si il y ai, il n'agis pas, sinon, il l'ajoute..
Pareil pour <img>xxx</img> Et pour <lien>xxx<lien>.. C'est juste de procéder comme ça?
Ou il fraudrait plutôt procéder avec la version déjà changée par le bbcode? Genre vérifier <img src="xxx" et <a href="xxx" ?

Je débute alors désolé si les questions sont stupides. J'ai fait des recherches mais il n'y a pas beaucoup d'aide pour faire un bbcode.

Merci à vous de m'aider!

Tex