webForumDet fria alternativet

BBCode/korta länkar

3 svar · 207 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 441 inlägg
#1

Tjena,

Har följande för att parsa länkar som BBCode:

$Str = preg_replace('/\[URL\](.*?)\[\/URL\]/i', '<a href="$1" rel="nofollow" target="_blank">$1</a>', $Str);

Problemet är att om man postar väldigt långa URLer ser det konstigt ut, så jag skulle vilja korta ner "$1" som själva länktiteln. Skulle vilja korta ner det enl. följande:

preg_replace('/(?<=^.{15}).{4,}(?=.{20}$)/', '...', $Str)

Resultatet av ovan blir då t.ex. http://www.google.se/.../bla.html

Men det går inte att använda ovan preg_replace på $1 (såklart!), så, hur gör jag? Tack!

aasahMedlem sedan mars 20034 471 inlägg
#2

Vad händer om du ersätter punkterna med char(46) (= .)?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#3

Hej,

Är inte riktigt med... Jag ska förklara lite bättre. När man postar en länk, sparas den i databasen såhär:

[URL="https://www.google.com.ph/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8"][ URL ][/URL][url]https://www.google.com.ph/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8[/url][URL="https://www.google.com.ph/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8"][ / URL ][/URL]

När jag sedan visar inlägget, ska ovan parsas till:

<a href="https://www.google.com.ph/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8" rel="nofollow">https://www.goog[red][B]...[/B][/red]=2&ie=UTF-8</a>

Skulle alltså vilja göra "allt" med en preg_replace, men måste isf. köra en till replace på $1. Förstår inte hur och var jag ska få in ditt förslag.

Tack

metalboyMedlem sedan jan. 2005953 inlägg
#4

Om du använder preg_replace_callback() istället borde du kunna göra det du vill.

140 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)