Page 1 sur 3
Insérer des basiles href et target= "_blank" dans un texte
Publié : mer. 11/mars/2015 10:36
par falsam
Hello tous
Code : Tout sélectionner
Procedure urlifier(Text.s)
EndProcedure
Buffer.s = "Cliques sur ce lien https://www.youtube.com/?hl=fr&gl=FR ou sur http://youtube.com"
urlifier(Buffer)
J'ai besoin de urlifier ce type de texte.
Si les rois de la boucle For ... next pouvaient m'aider en me procurant un code
sans regex pour insérer des basiles
href et
target= "_blank"dans un texte contenant des liens, je suis preneur

Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 11:46
par G-Rom
Salut Falsam, FindString te renvois la position d'un texte recherché , avec uniquement cette fonction tu devrais t'en sortir ?
sinon, donne un exemple de ce que attends , je ne suis pas un expert du web
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 12:18
par falsam
Bonjour G-Rom.
Voila ce que j'avais fait pour un seul lien dans une phrase
Code : Tout sélectionner
Procedure.s urlifier(UserMessage.s)
Protected pos1, pos2, url.s, Buffer.s
If UserMessage <> ""
;Cherche http: ou https: ou www.
pos1 = FindString(UserMessage, "http:")
If pos1 = 0
pos1 = FindString(UserMessage, "https:")
If pos1 = 0
pos1 = FindString(UserMessage, "www.")
EndIf
EndIf
If pos1
pos2 = FindString(UserMessage, " ", pos1)
If pos2 = 0
pos2 = Len(UserMessage)+1
EndIf
url = Mid(UserMessage, pos1, pos2-pos1)
Buffer=""
If pos1 > 1
Buffer = Mid(UserMessage, 1, pos1-1)
EndIf
Buffer + "<a href=" + Chr(34) + url + Chr(34) + " target="+Chr(34)+"_blank" + Chr(34)+ ">"+ url + "</a>" + Mid(UserMessage, pos2)
UserMessage = Buffer
EndIf
EndIf
ProcedureReturn Buffer
EndProcedure
Buffer.s = "Cliques sur ce lien http://purebasic.com"
Debug urlifier(Buffer)
Par contre je n'arrive pas à faire la même chose quand une phrase contient plus d'un lien.
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 12:45
par Ar-S
Je ne sais pas si ça pourra t'aider mais Target _blank en html5 n'est plus d'actualité.
Pour rester dans le move, tu peux utiliser rel="external" pour ton lien en le couplant à un javascript qui lui contient le _blank. (ce que j'ai fait pour mon site).
ça marche bien.
Voilà le JS que tu appelleras dans ton entete de page
Code : Tout sélectionner
function externalLinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName("a");
for (var i=0; i<anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute("href") &&
anchor.getAttribute("rel") == "external")
anchor.target = "_blank";
}
}
window.onload = externalLinks;
Ton lien se présente ensuit ainsi
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 13:09
par falsam
Mais monsieur Ar-s, c'est en PureBasic que je le souhaite. Le tchat sur lequel je travaille dessus est codé en PureBasic avec l'éditeur officiel

Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 13:51
par falsam
@Ar-S: Le rel "external" n'est pas standardisé. il faut lui adjoindre du code JavaScript pour que ça fonctionne. je préfère du code html valide WC3.
Aide :
http://www.w3schools.com/tags/att_a_rel.asp
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 14:15
par G-Rom
Tu devrais dans un premier temps extraire toutes les urls de ta phrase , une fois isolé , c'est plus pratique pour intervenir dessus et rajouté les balise html que tu veut.
tu supprimes toute les urls de ta phrase originale , et tu les remplaces par les urls modifié , voila une procédure qui extrait une url et qui sauvegarde le resultat dans une liste:
Code : Tout sélectionner
Procedure extractURL(List result.s(), string.s, startPos = 0)
; URL EN HTTP
pos = FindString(LCase(string),"http",startPos)
If pos <> 0
AddElement(result())
chr$ = Mid(string,pos,1)
While chr$ <> " "
chr$ = Mid(string,pos,1)
pos+1
result() + chr$
If pos > Len(string)
Break
EndIf
Wend
; on a pas fini
If pos < Len(string)
extractURL(result(), string, pos)
EndIf
EndIf
EndProcedure
NewList urls.s()
extractURL(urls(), " voila des liens : http://purebasic.com ou encore : http://google.com et cerise sur le gateau ici : http://youporn.com")
ForEach urls()
Debug urls()
Next
Publié : mer. 11/mars/2015 14:52
par SPH
Voici
le code gagnant :
Code : Tout sélectionner
la$="texte : www.clubic.com et https://manga.be florence et les autres"
Repeat
ii=FindString(la$, " ", 1)
If ii=0
ch$=la$
la$=""
Else
ch$=Mid(la$,1,ii-1)
la$=Right(la$,Len(la$)-ii)
EndIf
If LCase(Left(ch$,7))="http://" Or LCase(Left(ch$,8))="https://" Or LCase(Left(ch$,4))="www."
final$+ "<a href=" + Chr(34) + ch$ + Chr(34) + " target="+Chr(34)+"_blank" + Chr(34)+ ">"+ ch$ + "</a> "
Else
final$+ch$
If la$<>""
final$+" "
EndIf
EndIf
Until la$=""
Debug final$
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 15:00
par GallyHC
Bonjour
Comme promis ma version :
Code : Tout sélectionner
Procedure.s urlscan(text.s, pos.i)
;
Define.i i, ok, more
For i=pos To Len(text)
If Mid(text, i, 1) = " " Or Len(text) = i
ok = i
Break
EndIf
Next i
If ok > 0
If ok = Len(text)
text = ReplaceString(text, Mid(text, pos, ok - pos + 1), "<a href=" + Chr(34) + Mid(text, pos, ok - pos + 1) + Chr(34) + ">" + Mid(text, pos, ok - pos + 1) + "</a>")
Else
text = ReplaceString(text, Mid(text, pos, ok - pos + 1), "<a href=" + Chr(34) + Mid(text, pos, ok - pos + 1) + Chr(34) + ">" + Mid(text, pos, ok - pos + 1) + "</a> ")
EndIf
ProcedureReturn text
EndIf
EndProcedure
Procedure.s urlifier(text.s)
;
Define.i urinum, uriwww, i
urinum = CountString(text, "http:")
urinum + CountString(text, "https:")
If urinum = 0
uriwww = CountString(text, "www.")
EndIf
If urinum > 0
urinum = CountString(text, "http:")
If urinum > 0
For i=1 To urinum
text = urlscan(text, FindString(text, "http:", i))
Next i
EndIf
urinum = CountString(text, "https:")
If urinum > 0
For i=1 To urinum
text = urlscan(text, FindString(text, "https:", i))
Next i
EndIf
Else
If uriwww > 0
urinum = CountString(text, "www.")
If urinum > 0
For i=1 To urinum
text = urlscan(text, FindString(text, "www.", i))
Next i
EndIf
EndIf
EndIf
ProcedureReturn text
EndProcedure
Buffer.s = "Cliques sur ce lien https://www.youtube.com/?hl=fr&gl=FR ou sur http://youtube.com ou encore www.koakdesign.info"
Debug urlifier(Buffer)
Buffer.s = "Cliques sur ce lien www.koakdesign.info"
Debug urlifier(Buffer)
Cordialement,
GallyHC
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 15:08
par Marc56
falsam a écrit :sans regex
snif
J'avais préparé ça, c'est pourtant joli, rapide et facilement compréhensible
Code : Tout sélectionner
Buffer.s = "Clique sur ce lien https://www.youtube.com/?hl=fr&gl=FR ou sur http://youtube.com ou www.google.fr"
CreateRegularExpression(0, "(www|https?://)([^\s]+)")
If ExamineRegularExpression(0, Buffer)
While NextRegularExpressionMatch(0)
Debug "<a href=" + Chr(34) +
RegularExpressionGroup(0, 1) + RegularExpressionGroup(0, 2) + Chr(34) +
" target=" + Chr(34) + "_blank" + Chr(34) + ">" +
RegularExpressionGroup(0, 1) + RegularExpressionGroup(0, 2) + "</a>"
Wend
EndIf
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 17:57
par GallyHC
bonjour
SPH> c'est mieux déjà un "repeat" qu'un goto

. Et enfin il ajoute un espace en fin de ligne si le dernier est justement une url

.Mais j'adore ce type de code tellement plus simple que ma proposition.
GallyHC
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 18:13
par SPH
GallyHC a écrit :bonjour
SPH> c'est mieux déjà un "repeat" qu'un goto

. Et enfin il ajoute un espace en fin de ligne si le dernier est justement une url

.Mais j'adore ce type de code tellement plus simple que ma proposition.
GallyHC
Bien vu
Ton code est mega long ! Mais comment tu fais ?

Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 18:19
par GallyHC
Bonjour,
Reprise du code de SPH avec la correction du problème dit plus haut (et un peu remis en forme "j'avais besoin pour bien tout comprendre"

):
Code : Tout sélectionner
Define i.i
Define.s stxt, result, text ="texte : http://www.clubic.com et https://manga.be florence et les autres et www.koakdesign.info"
Repeat
i = FindString(text, " ", 1)
If i = 0
stxt = text
text = #NULL$
Else
stxt = Mid(text, 1, i - 1)
text = Right(text, Len(text) - i)
EndIf
If LCase(Left(stxt, 7)) = "http://" Or LCase(Left(stxt, 8)) = "https://" Or LCase(Left(stxt, 4)) = "www."
If text <> #NULL$
result + "<a href=" + Chr(34) + stxt + Chr(34) + " target=" + Chr(34) + "_blank" + Chr(34) + ">" + stxt + "</a> "
Else
result + "<a href=" + Chr(34) + stxt + Chr(34) + " target=" + Chr(34) + "_blank" + Chr(34) + ">" + stxt + "</a>"
EndIf
Else
result + stxt
If text <> #NULL$
result + " "
EndIf
EndIf
Until text = #NULL$
Debug "*" + result + "*"
et comment je fait c simple pas bien au vu de ton code

. Mais t'inquiète, il est a 100% adopté maintenant il a son petit chez lui ton code

.
GallyHC
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 18:26
par falsam
@Marc: Merci pour ta version qui tu peux me croire est celle que je préfère. Malheureusement je viens de l'essayer et c'est ce que je redoutais : Bien que le résultat est correcte avec PureBasic, ça ne fonctionne pas avec SpiderBasic et PB2Web.
@GallyHC: Merci ça fonctionne parfaitement bien avec SpiderBasic et PB2Web.
@SPH: Merci ça Fonctionne avec SpiderBasic mais pas avec PB2Web pour une raison que je n'ai pas encore analysé.
@G-Rom : Merci pour ton code. Je n'avais pas pensé à la récursivité. La méthode est simple.
Re: Insérer des basiles href et target= "_blank" dans un tex
Publié : mer. 11/mars/2015 18:29
par GallyHC
J'avais proposé aussi a la base les regex mais bon...
GallyHC