Hallo,
Ik ben bezig met een forum voor mijn website. Ik heb er een functie ingebouwd waarmee UBB-codes gereplaced worden en daarbij horen ook URL's; die worden automatisch omgezet in hyperlinks. Dit werkt allemaal perfect. Die functie ziet er als volgt uit:
Er horen nog meer codes bij, alleen dit is hetgeen wat ik gebruik om hyperlinks automatisch aan te laten maken.
Nu bedacht ik me ineens het volgende: als men een url invoert die te lang is, dan wordt mijn design verknoeit, want die wordt niet afgekapt. Nu wil ik dus dat die url wel afgekapt wordt, in het volgende formaat: [eerste 23 tekens]...[laatste 23 tekens]. Dus dat er 3 puntjes (...) in het midden van de url staat. Hier heb ik een functie voor gemaakt. Deze functie ziet er als volgt uit, en werkt ook prima:
Nu moet de url in de eerste functie dus ergens afgekapt worden. Dat de URL in de a-tag wel volledig blijft staan, maar de tekst die dan getoond wordt (ook URL), moet dan ingekort worden. Weet iemand hoe dit moet? Ik heb al wel iets geprobeerd, dit is de functie aanroepen midden in de eerste functie, maar dit werkt niet echt. Het zag er toen als volgt uit:
Is er misschien iemand die net zoiets heeft gedaan en/of een oplossing hiervoor weet? Of misschien een andere manier die hetzelfde doet?
Alvast bedankt!
Ik ben bezig met een forum voor mijn website. Ik heb er een functie ingebouwd waarmee UBB-codes gereplaced worden en daarbij horen ook URL's; die worden automatisch omgezet in hyperlinks. Dit werkt allemaal perfect. Die functie ziet er als volgt uit:
PHP:
1
2
3
4
5
6
7
8
| function UBB($str) { $str = eregi_replace("\\\[url\\]www.([^\\\[]*)\\\[/url\\]", "<a href=\"http://www.\\1\" target=\"blank\">\\1</a>", $str); $str = eregi_replace("\\\[url\\]([^\\\[]*)\\\[/url\\]", "<a href=\"\\1\" target=\"blank\">\\1</a>", $str); $str = eregi_replace("\\\[url=([^\\\[]*)\\]([^\\\[]*)\\\[/url\\]", "<a href=\"\\1\" target=\"blank\">\\2</a>", $str); $str = eregi_replace("(^|[>[:space:]\n])([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])([<[:space:]\n]|$)", "\\1<a href=\"\\2://\\3\\4\" target=\"_blank\">\\2://\\3\\4</a>\\5", $str); return $str; } |
Er horen nog meer codes bij, alleen dit is hetgeen wat ik gebruik om hyperlinks automatisch aan te laten maken.
Nu bedacht ik me ineens het volgende: als men een url invoert die te lang is, dan wordt mijn design verknoeit, want die wordt niet afgekapt. Nu wil ik dus dat die url wel afgekapt wordt, in het volgende formaat: [eerste 23 tekens]...[laatste 23 tekens]. Dus dat er 3 puntjes (...) in het midden van de url staat. Hier heb ik een functie voor gemaakt. Deze functie ziet er als volgt uit, en werkt ook prima:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| function StripURL($str, $maxStrLength) { $strLength = strlen($str); if ($strLength >= $maxStrLength) { $BeginStrip = $strLength - $maxStrLength / 2; $str1 = substr(trim($str), 0, $maxStrLength / 2); $str2 = substr(trim($str), $BeginStrip); $str = "$str1...$str2"; } return $str; } |
Nu moet de url in de eerste functie dus ergens afgekapt worden. Dat de URL in de a-tag wel volledig blijft staan, maar de tekst die dan getoond wordt (ook URL), moet dan ingekort worden. Weet iemand hoe dit moet? Ik heb al wel iets geprobeerd, dit is de functie aanroepen midden in de eerste functie, maar dit werkt niet echt. Het zag er toen als volgt uit:
PHP:
1
| $str = eregi_replace("(^|[>[:space:]\n])([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])([<[:space:]\n]|$)", "\\1<a href=\"\\2://\\3\\4\" target=\"_blank\">" .StripURL("\\2://\\3\\4", 46). "</a>\\5", $str); |
Is er misschien iemand die net zoiets heeft gedaan en/of een oplossing hiervoor weet? Of misschien een andere manier die hetzelfde doet?
Alvast bedankt!