Regex : rendre clicable un lien + couper les long mots sans couper l'url !

Répondre
mobman02
le 25/08/2005 à 14:39
mobman02
Bonjour, je me suis mis dans un vrai casse tête...

Je une regex pour transformer les url en lien:

$donnees['message_chat'] = eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])",
"<a href=\"\\1://\\2\\3\" target=\"_blank\">lien</a>",$donnees['message_chat']);


Jusque la ca marche.

Ensuite j'ai aussi une fonction pour couper les mots trop long...
function cutLongWords($string,$length='15',$separation=' ')
{
return preg_replace('/([^ ]{'.$length.'})/si','\\1'.$separation,$string);
}

Voila, mon probleme c'est que la fonction pour couper les mots coupe aussi l'url qui est dans le lien...

J'aimerais dire a ma fonction de ne pas couper les grand mots contenue entre < et >.
Mais moi et les expression reguliere on est pas encore tres copain...

Quelqu'un peu m'aider ?
Merci ;)
http://damienalexandre.fr/
JuTs
le 26/08/2005 à 10:53
JuTs
J'ai le même problème. Mais j'ai procédé dans l'ordre inverse : couper la chaîne, puis passer le regex.

Je n'ai pas encore de solution mais je pensais rechercher la position du dernier tag [...] et du dernier [/...]. Si le dernier [/...] est avant le dernier [...] c'est qu'il manque un [/...]

Je ne suis pas allé plus loin que ça pour le moment.

Ma fonction regex si sa peut intéresser qqn
http://www.lephpfacile.com/wall/wall.php?id=2414
JuTs
savageman
le 26/08/2005 à 13:11
savageman
Ceci vous aidera peut-être

lien

Version plus récente:
http://www.phpfrance.com/forums/voir_sujet-199.php
mobman02
le 27/08/2005 à 13:14
mobman02
Merci pour vos liens,
bon en attendant, j'ai commencer a apprendre les expression régulieres,
c'est encore plus dur que ce que je pensait xD

Je commence a y aller a taton pour ma regex, voici le premier echantillon de bout de debut de code propre ^^

<?
$donnees['message_chat'] = "unlonglonglonglongmots qui va etre couper, et un url aussi tres http://www.longlonglonglonglong.com qui ne doit pas se couper !";

$donnees['message_chat'] = eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])",
"<a href=\"\\1://\\2\\3\" target=\"_blank\">lien</a>",$donnees['message_chat']);

// je commence par transformer mon url en lien
// apres faut que je mette mes espace hors tag html
// alors la elle est simplissime, apres faudras la corriger :/ mais je suis pas douer

$separation = " ";
$length = "5";

preg_replace('![^<]*([^ ]{'.$length.'})[^>]*!','\\1'.$separation,$donnees['message_chat']);

echo $donnees['message_chat'];
?>


ca me retourne
unlonglonglonglongmots qui va etre couper, et un url aussi tres <a href="http://www.longlonglonglonglong.com" target="_blank">lien</a> qui ne doit pas se couper !


En gros l'espacement ne se fait pas smiley

J'ai chercher des technique pour dire a mon second regex de ne pas modifier ce qu'il y a entre des crochet, mais du coup il modifi plus rien du tout.

L'erreur doit etre toute bete en plus :(

Merci pour votre aide @+
http://damienalexandre.fr/
JuTs
le 29/08/2005 à 08:30
JuTs
En gros l'espacement ne se fait pas


??? Heu... En fait je ne suis plus très sûr de comprendre ce que tu veux faire. Tu dois faire quoi avec le longs mots ?
JuTs
Bzh
le 29/08/2005 à 11:02
Bzh
Inserer un espace pour que la deuxième partie passe à la ligne automatiquement si j' ai bien compris...

Ciao...
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours