|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bonjour,
J'ai un petit souci : Je dois tronquer les chaines de caractères qui s'affichent sur la page, si celles-ci dépassent 26 caractères. Pour ce faire, à la réception d'un formulaire, je tronque le contenu à l'aide de la fonction suivante : Code :
Je dois donc excepter de la fonction ci-dessus les urls. A priori il faudrait détecter celle-ci via <a href></a>. Voyez-vous comment faire ?
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() |
tu test les premiers caracteres et si ils sont egales a http:// ou a www tu ne fais pas ta troncature
__________________
n'oubliez pas la balise |
|
|
00
|
|
|
#3 |
|
Inactif
![]() Inscription : septembre 2004 Messages : 11 753 ![]() |
Tu pourrais tester avec un :
Code :
eregi("http:\/\/www\..([a-z]+\.[a-z]{3}",$chaine,$split) Code :
preg_match("#http:\/\/www\.([a-z]+\.[a-z]{3})#",$chaine,$split) |
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Oui alors je réfléchi à ce que vous me dites là. Par contre je me suis mal expliqué :
Si le gars me fait un copier/coller d'une url, je m'en fiche de la tronquer de toute façon elles ne réagissement pas aux clics à l'affichage. Par contre sur mon éditeur de texte made in taïwan j'ai un bouton qui crée des liens avec libellé. Donc il apparait sur l'écran du visiteur un lien google et le <a href="http://www.google.fr"></a> ne se voit pas, c'est dans le code. C'est ce <a href="......"> que je ne veux pas découper avant l'envoit dans la base. **edit** A priori y'a deux solutions : soit je détecte dans le contenu les <a href> et je les tronque pas. Soit je les recolle après qu'elles aient été tronquées. Reste à écrire la chose quoi...
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
00
|
|
|
#5 |
|
Inactif
![]() Inscription : septembre 2004 Messages : 11 753 ![]() |
Ben dans l'expression régulière que je t'ai donné tu rajoutes juste le href et ca devrait etre bon, non ?
|
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Étudiant Inscription : février 2004 Messages : 2 168 ![]() |
Sinon j'utiliserait preg_replace_callback() à ta place (je l'aime bien celui là).
Code :
Mais je me demand si c'est bien ça que tu veux ? Edit: Mmm mon code ne doit pas fonctionner dans tous les cas... Est ce que tu pourrais même un exemple de chaine que tu récupères? |
||
|
|
00
|
|
|
#7 | |||||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Citation:
Citation:
Code :
![]() Citation:
Un truc plus simple peut être : Comment supprimer les espaces dans une chaine qui commence par <a href et termine par > ? Pas de if ni rien là dedans, je devrais comprendre
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|||||
|
|
00
|
|
|
#8 |
|
Inactif
![]() Inscription : septembre 2004 Messages : 11 753 ![]() |
pour supprimer au début et à la fin c'est trim
à l'intérieur Code :
explode(" ",$chain) ou $chain = str_replace(" ","",$chain); Et pour le preg oui dans une condition if, et si c'est vrai les lignes dans ton seront effectué |
|
|
00
|
|
|
#9 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Code :
explode(" ",$chain) ou $chain = str_replace(" ","",$chain); Maintenant comme j'ai peur de rien , j'ose la question suivante :Comment c'est-y que j'isole de $contenu les $chain qui ressemble à des <a href ...> pour les passer en paramètre à explode ? C'est atroce si je fais ça ? $chain= preg_match("#http:\/\/www\.([a-z]+\.[a-z]{3})#",$chaine,$split) ? Et si pour tester si preg_match a renvoyé quelque chose, je fais, tenez vous bien : Code :
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#10 | ||
|
Inactif
![]() Inscription : septembre 2004 Messages : 11 753 ![]() |
Et plutot ca ?
Code :
|
||
|
|
00
|
|
|
#11 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bein je vais me faire frapper, mais j'ai fait ça, et ça fonctionne pas, mon lien est tronqué dans la balise, ça donne <a href="www.google.fr/ladress delapage.php">google</a> :
Code :
**edit** Ah dsl c'est peut être normal j'ai pas mis <a href devant http deux secondes je reviens.
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#12 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Non c'est zero, je suis nul en expression régulière, heuresement c'est pas ce qu'il ya de plus simple.
D'ailleur dans le truc je sais même pas comment écrire la chaine complète : Code :
if(preg_match("#<a href=\"http:\/\/www\.([a-z]+\.[a-z]{3}\">)#",$contenu,$split)) )En plus tout ça c'est parce que la nouvelle version d'IE veut pas m'afficher mon overflow horizontal et que ça casse mes divs si y'a un texte trop long...... (y'en a qui vont morfler avec IE 7 question affichage, ça réserve des surprises.
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
00
|
|
|
#13 | |||
|
Membre Expert
![]() Étudiant Inscription : février 2004 Messages : 2 168 ![]() |
Si j'ai bien suivi tu veux maintenant supprimer les espaces dans les liens? Genre:
Citation:
Code :
|
|||
|
|
00
|
|
|
#14 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Salut Anduriel,
Non en fait je veux pas supprimer les espaces dans le texte du lien mais bien dans l'url : Code :
Mais après c'est l'url dans la balise qui risque aussi d'être hachée. Et là c'est grave ==> le lien ne fonctionne plus. Il faut donc recoler les morceaux de l'url éventuellement découpée par le script de hachage, mais pas le texte du lien qui lui doit rester découpé.
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() Étudiant Inscription : février 2004 Messages : 2 168 ![]() |
Tu modifies donc juste un peu la fonction. (Ce script est donc a utiliser après le pré-traitement sur la chaine):
Code :
|
||
|
|
00
|
|
|
#16 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Je pige pas ton code Anduriel, je bosse jamais avec les fonctions, j'ai justement décidé de m'y mettre aujourd'hui
Je peux pas utiliser un code que je comprend pas : Code :
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#17 | ||
|
Membre Expert
![]() Étudiant Inscription : février 2004 Messages : 2 168 ![]() |
Si tu veux connaitre les détails il faut voir la fonction preg_replace_callback() justement
Je t'explique: Code :
$str = preg_replace_callback("#\<a(.*)href\='([^']*)'(.*)>(.+)\<\/a\>#", "delete_spaces", $chaine); Code :
Donc comme tu vois cette fonction retourne (return) un nouveau lien avec les options présentes dans les liens trouvés ($results[1], $results[3]), son texte ($results[4]) et enfin son adresse ($results[2]) qui est traitée de façon à remplacer les espace (" ") par rien (""). Si t'as encore des problèmes dit le moi. |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com