MungoMedlem sedan jan. 2000372 inlägg Nu håller jag på att bli galen. Efter att ha suttit en hel eftermiddag och testat olika varianter av regexp för att hitta weblänkar och e-postadresser i en sträng har jag gett upp. Jag har helt enkelt inte hittat NÅN funktion som klarar allt som jag vill. Kanske nån härpå webforum har en att dela med sig av?
En vettig funktion ska ju klara allt detta:
www.algonet.se
http://www.algonet.se
http://www.algonet.se/\~test
http://www.algonet.se/\~test/folder
http://www.algonet.se/\~test/folder/
http://www.algonet.se/\~test/folder/sida.php
http://www.algonet.se/\~test/folder/sida.php?arg
http://www.algonet.se/\~test/folder/sida.php?arg=1
http://www.algonet.se/\~test/folder/sida.php?arg=1&arg2
http://www.algonet.se/\~test/folder/sida.php?arg=1&arg2=2
http://www.algonet.se/\~test/folder/sida.php?arg=1&arg2=2. (obs punkten eller varför inte komma?)
test@algonet.se
test.test@algonet.se
t_test.test@algonet.se
t_test.test@m.algonet.se
t_test.test@m.algonet.se. (obs punkten igen)
Sitter nån av er på ett riktigt benknäckartrick så tveka inte att dela med er till en frustrerad PHP-broder!
//Måns
PS) Efter att ha testat så visar det sig att webforums funktion klarar alla ovanstående utom den sista weblänken, dvs den med punkt på slutet. Men den klarar mailadress med punkt på slutet. Skumt? Hursomhelst, kan man få låna webforums funktion kanske? DS.
PicklezzMedlem sedan jan. 2002414 inlägg varför skall den klara punkt i slutet????
på en webbadress kan man kanske förstå men i en epost adress så finns väl aldrig punkt på slutet?
MungoMedlem sedan jan. 2000372 inlägg Folk...
Det kan ju knappast finnas punkt i slutet på en webadress heller men folk skriver ju sånt här:
Kom till min fina websida! Adressen är http://www.blabla.com.
Min e-postadress är blabla@blabla.com.
Så därför. Men är det ingen som har en funktion? :)
Trevlig midsommar!
PicklezzMedlem sedan jan. 2002414 inlägg det skulle kunna vara en "." i slutet på en webbadress jo...
men varför vill du ha med den??? *fattar inte* men men...
eftersom den finns i Webforum så kolla källkoden för vBulletin var man nu hittar den
MungoMedlem sedan jan. 2000372 inlägg Waaah :)
Jag vill INTE ha med den. Funktionen ska vara smart nog att fatta att:
http://www.algonet.se/\~test.
ska översättas till
<a href="http://www.algonet.se/\~test">http://www.algonet.se/\~test.\<a>
Jag visste inte att webforum var en generell mjukvara, tack för tipset - jag ska leta efter källkoden.
ChavezMedlem sedan maj 20001 953 inlägg webForum är inte generell mjukvara. Det (vBulletin) är en kommersiell applikation.
MungoMedlem sedan jan. 2000372 inlägg Men alltså är det så att INGEN har en vettig funktion för detta ändamål att låna ut? Konstigt.
VikingMedlem sedan maj 20003 652 inlägg Jag tror att https://www.flogs.org har en funktion som fungerar bra för ändamålet! (med reservation för ev. missar ang. krav för vad det ska klara i tidigare inlägg :))
R: Ops, sorry. Upptäckte att det inte fanns något dyl. skript där, hade för mig att det fanns ett där :l :r
MungoMedlem sedan jan. 2000372 inlägg Tack för tipset, men jag kan bara hitta tre script där och inget av dem hanterar strängar -> URL:er.
VikingMedlem sedan maj 20003 652 inlägg MungoMedlem sedan jan. 2000372 inlägg Nej, den får jag inte att funka alls, returnerar en tom sträng?
Den bästa funktion jag har lyckats hitta hittills och som jag använt mig av tills jag ledsnade i torsdags är denna:
function strLinks($text) {
$text = preg_replace("/\b((http(s?):\/\/)|(www\.))([\w\.]+)([\/\w+\.]+)\b/i","<a href=\"http$3://$4$5$6 \"target=\"_blank\">$2$4$5$6</a>", $text);
$text = preg_replace("/([\w\.]+)(@)([\w\.]+)/i","<a href=\"mailto:$0\">$0</a>",$text);
return $text;
}
...men den känner bara igen "vanilj"-URL:er, dvs utan ~, ? och sånt.
Egentligen borde väl ett regexp vara såhär:
OM (börjar med http: ELLER www) SÅ ta sträng fram till första whitespace och ersätt med HTML-kod för länk.
Alltså, jag menar egentligen borde det väl vara ett rätt enkelt regexp? Bara det att jag är så jäkla usel på regexp. Skäms på mig. :)
nkrantzMedlem sedan apr. 2002830 inlägg men om du använder dig av webforums kod å sedan bara tar bort det sista tecknet mha typ någon chop funktion (orkar inte kolla var det heter..) om det är en punkt...tills du hittar en funktion som passar....
MungoMedlem sedan jan. 2000372 inlägg Jo, men jag har ju inte ens hittat webforums kod för detta!
nkrantzMedlem sedan apr. 2002830 inlägg Då blev det ju lite svårare... testa denna funktion, vet inte hur den funkar med punkter på slutet dock :(
function linkText($text)
{
$text = preg_replace("/((http(s?):\/\/)|(www\.))([\w\.\\:\\?\\~\\=\\&\-_\/]+)/i","<a href=\"http$3://$4$5\" target=\"_blank\"><u>$2$4$5</u></a>",$text);
$text = preg_replace("/([\w\.\-_]+)(@)([\w\.\-_]+)/i", "<a href=\"mailto:$0\"><u>$0</u></a>",$text);
return $text;
}
//Nippe
MungoMedlem sedan jan. 2000372 inlägg Ah, yes! Först funkade den inte, men efter att ha fipplat lite med några backslashar så funkar den prima!!! (förutom punkten på slutet, men den kan man ju filtrera bort separat)
TUSEN TACK!!! Du har räddad mig från ett öde värre än döden (nämligen att på egen hand försöka lära mig regexp från scratch...)
Här är funktionen som den blev till slut: Borde kanske läggas in i wfKodexempel eller vad forumet nu heter?
function strLinks($text)
{
$text = preg_replace("/((http(s?):\\/\\/)|(www\\.))([\w\\.:?~=&\\-_\\/]+)/i","<a href=\"http$3://$4$5\" target=\"_blank\"><u>$2$4$5</u></a>",$text);
$text = preg_replace("/([w.-_]+)(@)([w.-_]+)/i", "<a href=\"mailto:$0\"><u>$0</u></a>",$text);
return $text;
}
MungoMedlem sedan jan. 2000372 inlägg Jahaja, nu såg jag att det var ju troligen inte ditt fel utan webforum som av nån anledning går in i PHP-kod och rensar bort backslashar! Varför det? Hursomhelst, efter att ha postat om med dubbla backslashar "\\" funkar det ju. Tack igen!
nkrantzMedlem sedan apr. 2002830 inlägg Hm, mycket konsigt! Jag har fått ovanstående kod att fungera förut, nu vill den inte alls: http://www.aftonbladet.se länkar bara upp http://www. och inte resten. Någon som vet varför?
// Nippe
nkrantzMedlem sedan apr. 2002830 inlägg Hittade följande kod på php.net
function strLinks($text)
{
$search = array("/(?<!quot;|[=\"]|:\/{2})\b((\w+:\/{2}|www\.).+?)"."(?=\W*([<>\s]|$))/i", "/\b(^| )([\w\.]+)(@)([\w\.-]+)\b/i");
$replace = array("<a href=\"$1\" target=\"_blank\">$1</a>", "<a href=\"mailto:$0\">$0</a>");
return preg_replace("/href=\"www/i", "href=\"http://www", preg_replace ($search, $replace, $text));
}
Den funkar med alla länkar som Mungo angivit ovan, dock inte epostlänkarna, men det behövde inte jag ;)
[EDIT]: Upptäkte att den inte klarade http://www.algonet.se/~test/folder/ ska se om jag kan lösa det!
// Nippe
LMDMedlem sedan jan. 200398 inlägg Re: Folk...
Mungo skrev:
Det kan ju knappast finnas punkt i slutet på en webadress heller men folk skriver ju sånt här:
Kom till min fina websida! Adressen är http://www.blabla.com.
Min e-postadress är blabla@blabla.com.
Så därför. Men är det ingen som har en funktion? :)
Trevlig midsommar!
Ovanstående adresser är faktiskt giltiga. Prova att skriva in t ex "www.dn.se." i en browser (utan citationstecken förstås). Om du inte inser varför så får du läsa på om dns-systemet ;-)