[PHP] URL's in forum automatisch aanpassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 28-05 15:07
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:

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!

Acties:
  • 0 Henk 'm!

Verwijderd

lama....

[ Voor 201% gewijzigd door Verwijderd op 07-02-2003 15:41 ]


Acties:
  • 0 Henk 'm!

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 28-05 15:07
Werkt ook niet. Had al zoiets geprobeerd, maar dan met dubbele quotes. Ik krijg nu de volgende fout:

Parse error: parse error, unexpected T_LNUMBER in F:\forum\topic.php on line 123

Acties:
  • 0 Henk 'm!

Verwijderd

hier een bestaande functie die wel werkt. (ookal is het niet de functie die je zoekt)

kan je vast wel wat mee:
PHP:
1
$post["body"] = preg_replace('_\\[php\](.*?)\\[/php\]_ise', "php_colorcoding('\\1')", $post["body"]);

Acties:
  • 0 Henk 'm!

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 28-05 15:07
Heb even een beetje geklooit met het scriptje wat je net als laatste postte, maar daar word ik ook niets wijzer uit. Kan het iig niet gebruiken (denk ik) met mijn script/idee.

Acties:
  • 0 Henk 'm!

  • Atteman146
  • Registratie: Juli 2000
  • Laatst online: 17-09 17:52
Nog iemand met een idee?
ik zet namelijk met hetzelfde probleem.

Acties:
  • 0 Henk 'm!

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 28-05 15:07
Hey Atteman,

Heb jij inmiddels al iets gevonden wat wel goed werkt? Of misschien iemand anders die weet wat ik wel zou kunnen doen?

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

je kunt toch het beste met preg_replace en de /e modifier werken. Wat heb je inmiddels en wat werkt er niet?

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Atteman146
  • Registratie: Juli 2000
  • Laatst online: 17-09 17:52
Ik heb inmiddels al wat aan de gang en idd met preg_replace en de /e modifier. Ik kan hem nu alleen niet posten (werk) maar ik zal kijken of ik dat vanavond kan doen.

[ Voor 3% gewijzigd door Atteman146 op 10-03-2003 10:55 ]


Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
Kan aan mij liggen, maar denk je niet gewoon te moeilijk? Als je een url in wil korten tussen karakter 23 vanaf begin en vanaf eind, waarom split je dan niet gewoon de string in begin, midden en eind, vervang midden door 3 puntjes en plak ze weer aan elkaar, met in de href de volledige url?

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 17-09 14:46

TheDane

1.618

waarom zou je uberhaupt 't midden van een url eraf willen halen ? waarom niet gewoon na x karakters afkappen en appenden met 3 puntjes oid?


en hoe weet je eigenlijk wanneer een url je design gaat verknoeien?

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
TheDane schreef op 10 March 2003 @ 12:35:
...
en hoe weet je eigenlijk wanneer een url je design gaat verknoeien?
Uhm, als de url erg lang is en niet afgebroken wordt, tis een kwestie van 1 keer kijken hoeveel chars houdbaar is en dan kan je zeggen dat hij niet langer dan X mag worden, lijkt mij :)

Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
M4rt1nvW schreef op 10 March 2003 @ 16:46:
Uhm, als de url erg lang is en niet afgebroken wordt, tis een kwestie van 1 keer kijken hoeveel chars houdbaar is en dan kan je zeggen dat hij niet langer dan X mag worden, lijkt mij :)
dat hangt onder meer af van:

• font face en grootte (gebruikersafhankelijk)
• grootte van het venster (gebruikersafhankelijk)
• soort karakters (bij de meeste lettertypes neemt b.v. de w (veel) meer ruimte in dan de i)

Pas de replâtrage, la structure est pourrie.


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
grootte van weergave venster is niet altijd gebruikersafhankelijk, afhankelijk van hoe je je site bouwt, werpt blik op got-page. Font-face en grootte is meestal standaard zoals jij het doorgeeft met behulp van css oid. Het lijkt mij dat de bedoeling dat een standaard computer de pagina goed weergeeft, dat lijkt mij een minimum en met die letters is gewoon een kwestie van een beetje passen en meten desnoods schrijf je er een leuke functie voor, die de verhoudingen van de letters kent en daar wat leuks mee rekent, en rekent hoeveer hij moet worden ingekort *idee*.

Naja, ik ben de TS niet dus laat ik graag het woord weer aan hem ;)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wat dat laatste betreft kun je het beter clientsided met css of javascript oplossen. CSS is helaas nog niet zover, maar dergelijke constructies komen er ongetwijfeld aan. Met javascript kun je een eind komen met offsetWidth.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

Het moet nog wel een beetje aangepast worden. Maar het kijk of de lengte van de url langer is dan 35 karakters. Als dit het geval is wordt de string opgesplist in drie stukken en geprint op het scherm.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?

    $max_aantal_karakters = 35;
    $url = "http://something.somewone.net/index.php?sort=desc";

    $lengte = strlen($url);

    if ($lengte > $max_aantal_karakters )
    {   
        $http[0] = substr($url, 0, 10);
        $http[1] = "[..]";
        $http[2] = substr($url, -10);

        echo "<a href=", $url, ">", $http[0].$http[1].$http[2], "</a>";
    }

?>
Pagina: 1