Kom ihåg mig?
Home Menu

Menu


regexp, addera http:// om inte redan finns

Ämnesverktyg Visningsalternativ
Oläst 2006-12-01, 22:28 #1
totoos avatar
totoo totoo är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2006
Inlägg: 730
totoo totoo är inte uppkopplad
Mycket flitig postare
totoos avatar
 
Reg.datum: Nov 2006
Inlägg: 730
Jag spammar vidare för att komma in i det hela.
Jag är nybörjare på regexp, men jag blir bättre och bättre, men jag misslyckas med den här.

Jag vill att alla www. som inte börjar med http:// får http:// i början. Det är alltså i mitt forum där medlemmar skriver, så texten finns någonstans mitt i en text, jag vet alltså ingenting om hur texten i övrigt ser ut. Men alltså, alla www. som INTE inleds med http:// ska få http:// i sin början.

använder förövrigt php med tanke på find-and-replace-funktion om det är nåt speciellt som ska användas.

Tack
totoo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-01, 23:32 #2
Charlie Charlie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2004
Inlägg: 701
Charlie Charlie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2004
Inlägg: 701
Du behöver inte använda regexp för det. Det är onödigt resurskrävande i just det här fallet. Pröva

$url = "www.wn.se";
if( strpos( $url, "http://" ) === 0 ) {
// Strängen börjar på http://, gör inget
}
else
{
$url = "http://" . $url;
}

Kanske kan vara värt att lägga en trim($url); för att få bort eventuella mellanrum ibörjan.

Edit: Visst kan if-satsen göras kortare men ibland kan det vara snyggt med tydlighet

Edit2: Läste inte ditt inlägg ordentligt. Mitt i en text var det alltså. Är lite osäker på den här typen av regexp, lookbehinds osv, men prova något i stil med:
$text = preg_replace("#(?<=http://)www.#s", "http://www.", $text);
Charlie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-01, 23:38 #3
Seattlegrunges avatar
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2003
Inlägg: 979
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
Seattlegrunges avatar
 
Reg.datum: Nov 2003
Inlägg: 979
Om du nu gillar tydlighet Charlie, så borde du kanske skriva så här istället

$url = "www.wn.se";
if( strpos( $url, "http://" ) === 0 ) {
$url = $url;
}
else
{
$url = "http://" . $url;
}
Seattlegrunge är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-01, 23:43 #4
totoos avatar
totoo totoo är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2006
Inlägg: 730
totoo totoo är inte uppkopplad
Mycket flitig postare
totoos avatar
 
Reg.datum: Nov 2006
Inlägg: 730
Okej, jag var inte tydlig nog.

Det är i ett forum, i inlägg, stora textmassor, inte ett inputfält som heter "skriv din webbadress"

Jag har ingen aning om vilka url:er mina medlemmar kommer skriva.

Jag kan ju fula det genom att typ leta på alla www. och sedan titta om det står http:// framför, annars lägga till (alltså lösa det med php och en loop), men nej tack.

Det kan vara ingen, en eller femhundratusen länkar i texten som genomsöks också för den delen, vi har ingen aning om vad som skrivs, däremot vet vi att folk ofta är slarviga och glömmer http:// och att min bb-kod-parser länkar fel, men jag vill inte göra om den (som körs vid varje sidladdning), utan jag vill manipulera inläggen precis när de skrivs och lagras i databasen.
totoo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-01, 23:51 #5
Charlie Charlie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2004
Inlägg: 701
Charlie Charlie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2004
Inlägg: 701
Kolla min edit ovan, var lite slö Dock kan jag knappast lova att det är en slutgiltig lösning. Har inte ens provat om det fungerar.
Charlie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-02, 01:26 #6
totoos avatar
totoo totoo är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2006
Inlägg: 730
totoo totoo är inte uppkopplad
Mycket flitig postare
totoos avatar
 
Reg.datum: Nov 2006
Inlägg: 730
Tack för hjälpen, men tyvärr gjorde det ingen skillnad. lookbehinds kallas det alltså, det ska jag läsa på.
totoo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-02, 08:24 #7
Blackexs avatar
Blackex Blackex är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 238
Blackex Blackex är inte uppkopplad
Medlem
Blackexs avatar
 
Reg.datum: Jun 2006
Inlägg: 238
Jag skulle nog prova detta:

$text = preg_replace("#(http://)?www\.#i", "http://www.", $text);

men det matchar bara domäner som börjar på www. Det idealiska är nog att försöka matcha mot hela domäner. Det fungerar alltså inte om dina användare skriver in xyz.domän.se. Det senare problemet löser du genom att ändra matchningen och använda bakåtreferenser. Se mer i manualen på http://php.net/preg_replace.

Observera att jag bland annat ändrade modiferaren från s till i. s:et hade ingen effekt. i:et gör att det matchar oavsett case.
Blackex är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-03, 16:59 #8
totoos avatar
totoo totoo är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2006
Inlägg: 730
totoo totoo är inte uppkopplad
Mycket flitig postare
totoos avatar
 
Reg.datum: Nov 2006
Inlägg: 730
fungerar utmärkt, stort tack!

Ja, det borde kanske matcha hela domäner, men jag antar kallt att de som inte skriver www-först vet vad de gör. Lite lat, men jag ska titta på det, men regexp kliar i mitt huvud så jag kommer inte göra det för att det är kul, utan för att jag ev. måste.
totoo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-03, 17:54 #9
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Först måste man bestämma sig för vad som ska sättas http:// framför. är det alla textsträngar som börjar på 'www' eller alla textsträngar som har en punkt i sig typ 'google.com' eller ska man sätta http framför alla meningar där man glömt att sätta ett mellanslag efter punkt.Nu kan det bli en rätt kul replace i denna texten. Kanske bäst att hålla sig till www i alla fall.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-03, 18:11 #10
totoos avatar
totoo totoo är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2006
Inlägg: 730
totoo totoo är inte uppkopplad
Mycket flitig postare
totoos avatar
 
Reg.datum: Nov 2006
Inlägg: 730
precis, den är inte helt uppenbar. Att bara ha på www kommer att fungera i 99% av fallen - det räcker långt.
totoo är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:12.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017