PHP hjälp!!!

Swedie

Administrator
Personal
Gick med
6 Mar 2003
Ort
Stockholm-ish
Hoj
Yamaha R7 -24
Nån som är kunglig på PHP?

Jag har en text ... t.ex:

*********
Jag är bara så bäst, fast inte just nu i med att jag inte kan PHP så jättebra, igentligen. Jag är bara så bäst, fast inte just nu i med att jag inte kan PHP så jättebra, igentligen. Jag är bara så bäst, fast inte just nu i med att jag inte kan PHP så jättebra, igentligen. Jag är bara så bäst, fast inte just nu i med att jag inte kan PHP så jättebra, igentligen. Och nu en URL som är CP lång: http://www.sporthoj.com/fgsdfgs/fg/dsf/gs/fgs/fgsf/gs/fg/sdf/gds/fg/dfg/ds/fgd/sfg/dsfg/ds/fg/dfg/sdfg.jpg Jag är bara så bäst, fast inte just nu i med att jag inte kan PHP så jättebra, igentligen. Jag är bara så bäst, fast inte just nu i med att jag inte kan PHP så jättebra, igentligen.
**********

Jag vill korta ner URLen, och samtidigt göra den till en HREF länk (alltså <a href="ålänkenhärifull">ochhärdenförkortadeversionen</a>).. Jag vill att URLen som man Ser, ska göras om så den endast är max 35 tecken lång OM den är över 35 tecken lång.

Förstår du mig? Ifall du kan greja det vore det ypperligt schyst!

Detta har jag just nu som script för att göra om till HTML länkar (som funkar bra, men gör inte helt vad jag vill juh!)

$data = preg_replace( "/(?<!<a href=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/i", "<a href=\"\\0\">\\0</a>", $data );

Tack!
 
Du borde ju kunna använda substr-funktionen, typ:

$html_link = "<a href=\"$url\">" . substr($url, 0, 35) . "</a>";

OBS! Kan inte PHP alls, men jag chansade lite. :D Det finns en substr såg jag iaf efter en sökning på google.
 
sopa... jag vet, men läs vad jag vill.

Det är INTE endast 1 url, det är en text med en URL inuti, så jag måste första detekta URLen och sen göra om den...
 
Swedie skrev:
sopa... jag vet, men läs vad jag vill.

Det är INTE endast 1 url, det är en text med en URL inuti, så jag måste första detekta URLen och sen göra om den...
Jaha .. du skulle plocka ut URL:en oxo!

$pos1 = strpos($data, "http://");
$pos2 = strpos($data, " ", $pos1);
$url = substr($data, $pos1, $pos2-$pos1);

Detta förutsätter ju iofs att det är ett mellanslag efter URL:en. Good enough?
 
hum, okej, mindre sopa nu =)

men det går inte kombinera funktionen där du söker efter position av en viss text med preg_match? detta för att se till att alla sorters URLer hittas...
 
Swedie skrev:
hum, okej, mindre sopa nu =)

men det går inte kombinera funktionen där du söker efter position av en viss text med preg_match? detta för att se till att alla sorters URLer hittas...
Hmm...

Kolla på funktionen preg_grep. Den borde du kunna använda tillsammans med explode.
 
Tittade lite på den funktionen och den kräver ju en array ... går ju inte. min $string är endast en string med massa text i (artikel).

Vill verkligen få det här utklurat...
 
Använd funktionen preg_replace_callback() istället, då kan du ifrån den funktionen anropa en annan funktion som sköter ihopmeckandet av den ersatta strängen... Ähh, dåligt förklarat, men kika på funktionen så förstår du nog! :)

Här är koden som gör det du ville ha, kortar ner länktexten så att den max är 35 tkn:
Code:
<?
  function createLink($matches) {
     return "<a href=\"".$matches[1]."\">".substr($matches[1], 0, 35)."</a>";
  }
  
  $data = "Jag är bara så bäst, fast inte just nu i med att jag inte kan PHP". 
           "så jättebra, igentligen. Jag är bara så bäst, fast inte just nu i med ".
           "att jag inte kan PHP så jättebra, igentligen. Jag är bara så bäst, fast".
           "inte just nu i med att jag inte kan PHP så jättebra, igentligen. Jag är ".
           "bara så bäst, fast inte just nu i med att jag inte kan PHP så jättebra, ".
           "igentligen. Och nu en URL som är CP lång: ".[url]http://www.sporthoj.com/fgsdfgs/fg/dsf/gs/fgs/fgsf/gs/fg/sdf/gds/fg/dfg/ds/fgd/sfg/dsfg/ds/fg/dfg/sdfg.jpg[/url]".
           "Jag är bara så bäst, fast inte just nu i med att jag inte kan PHP så ".
           "jättebra, igentligen. Jag är bara så bäst, fast inte just nu i med att ".
           "jag inte kan PHP så jättebra, igentligen.";

  $data = preg_replace_callback( "/(?<!<a href=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/i", createLink, $data ); 

  echo $data;
?>

Som du ser så anropar preg_replace_callback metoden createLink, denna metod är "callback"-metoden och den får en array med träffarna som den sen använder för att sätta ihop lämplig utdata med hjälp av substr-funktionen.
 
Last edited:
yes box! Jättetack!

Ypperlig funktion! Vill du vara min nya PHP support på ICQ, MSN, AOL ? :D skulle hjälpa .. lols...

vill veta mer .. men, antar det tar tid.
 
Swedie skrev:
Ypperlig funktion! Vill du vara min nya PHP support på ICQ, MSN, AOL ? :D skulle hjälpa .. lols...
Hehe, det kostar ;). Närå, har du frågor så är det bara att ställa dom så skall jag försöka svara, men framförallt så bör du läsa på www.php.net där det finns tonvis med information och kommentarer, det var där jag hittade funktionen preg_replace_callback, jag hade aldrig använt den tidigare.
 
Nyheter
Motorsportsalongen i Örebro!

Jag tog en snabb avstickare...

Honda CB 1000 GT bjuder på sportig komfort

Det är ingen lätt uppgift H...

KTM: ”Det är helt klart vägen framåt.”

Rajiv Bajaj, 58, VD för den...

Framtidens hjälmar är här!

Bland finesserna finns ljus...

Öhlins, som under många år ...

Bridgestone lanserar nytt sportdäck

Bridgestone har presenterat...

Ny Suzuki-importör

Suzuki SV-7 GX var en av Su...

Suzuki byter importör!

Suzuki SV-7 GX var en av Su...

MotoGP-säsongen avslutas i stor stil

Den traditionella finalbild...

Återkallelse av KTM 125, 250, 390 och 990 DUKE-modeller från årsmodell 2024

Är din KTM bland dem som sk...

Back
Top