FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Mycket flitig postare
|
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 |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Mycket flitig postare
|
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); |
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Mycket flitig postare
|
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; } |
|||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Mycket flitig postare
|
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. |
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Mycket flitig postare
|
Kolla min edit ovan, var lite slö
![]() ![]() |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
Tack för hjälpen, men tyvärr gjorde det ingen skillnad. lookbehinds kallas det alltså, det ska jag läsa på.
|
|||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Medlem
|
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. |
|||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Mycket flitig postare
|
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. ![]() |
|||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Klarade millennium-buggen
|
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.
|
||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Mycket flitig postare
|
precis, den är inte helt uppenbar. Att bara ha på www kommer att fungera i 99% av fallen - det räcker långt.
|
|||
![]() |
![]() |
Svara |
|
|