Gå til innhold

[Løst]PHP + str_replace hjelp til å replace en URL med custom tekst som brukeren skriver inn


Anbefalte innlegg

Hei!

 

Jeg trenger litt hjelp.

Jeg skal bruke str_replace fra PHP for å bytte ut URL'en brukeren skriver inn med HTML koden:

<a href=""> </a>

Men jeg har lyst til å ha det slik det som skal bytte ut:

[URL="min-url.com"]custom tekst[/URL]

som blir til:

<a href="min-url.com">custom tekst</a>

Hvordan kan jeg gjøre dette?

Jeg replacer tekst fra en array =P

Lenke til kommentar
Videoannonse
Annonse

Regexp passer jo fint til det. Da kan man godta

[URL]http://google.com[/URL]

og

[URL="http://google.com"]google.com[/URL]

i samme slengen

function parseurl($data, $option)
{
//Av en eller annen latterlig grunn så gjør e-modifer at " blir til \"
$data = str_replace('\"', '"', $data);
$option = str_replace('\"', '"', $option);

$url = (empty($option)) ? $data : $option;
return '<a href="'.$url.'">'.$data.'</a>';
}
$tekst = preg_replace('#\[url(=(.*))?\](.*)\[/url\]#ise', 'parseurl(\'$3\', \'$2\')', $tekst);

Hvis du vil kreve "" rundt URLen som option bytter du ut (=(.*))? med (="(.*)")?

Lenke til kommentar

Hva var galt med Ernies forslag? Er ikke så forferdelig mange måter å løse dette på.

 

Om du bruker str_replace til slikt, så kan du faktisk ende opp med å ødelegge designet på siden din. Med mindre man bruker strpos/strstr/preg_match for å kontrollere at antall åpningstagger stemmer med antall sluttagger, men det krever antageligvis med kode og mer ressurser enn preg_replace.

Lenke til kommentar

For ikke å snakke om at det er nærmest klin umulig å få det til med bare str_replace uannsett. "] eller ] kan være en del av en URL, Email, IMG, Quote, List, Color, Size osv. hvilket gjør det umulig å vite hva man skal endre det til med str_replace, og det er før man i det heltatt begynner å snakke om at URL-en i en

[url]http://www.google.com[/url]

skal settes inn to steder i tilsvarende HTML.

Lenke til kommentar
Hvordan kan jeg få til dette med regex?

 

$urltest = "[URL=http://google.com]google.com[/URL]";

function parseurl($data, $option)
{
//Av en eller annen latterlig grunn så gjør e-modifer at " blir til \"
$data = str_replace('\"', '"', $data);
$option = str_replace('\"', '"', $option);

$url = (empty($option)) ? $data : $option;
return '<a href="'.$url.'">'.$data.'</a>';
}

$urltest = preg_replace('#\[url(=(.*))?\](.*)\[/url\]#ise', 'parseurl(\'$3\', \'$2\')', $urltest);

echo $urltest;

 

utestet

Endret av Thomas.
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...