Page 1 of 2 12 Last
  1. #1
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55

    php : Ingewikkelde reguliere expressie ( urls verwerken )

    Ik zoek een reguliere expressie die ik kan gebruiken in preg_replace()


    ik zou bepaalde woorden in een tekst willen vervangen door een link. Dit op zich is simpel:

    PHP Code:
    $string preg_replace("/(kernwoord)/","[url=http://www.blabla.be]\\1[/url]",$string); 
    MAAR:
    dat kernwoord mag NIET in bepaalde tags voorkomen. Als het kernwoord reeds in een url tag staat bijvoorbeeld, mag het niet vervangen worden door een link, anders krijgt ge zoiets:

    [ url=http://www.xxx.be][ url=http://www.blabla.be]kernwoord[/url][/url]

    en da is natuurlijk geen zicht

    Als het woord "kernwoord" in een [url], [img], .... tag voorkomt, mag het NIET vervangen worden door een link, anders wel.

    Bestaat hier een reguliere expressie voor? zoja: welke, zoniet: what to do?

    thx
    no votes  

  2. #2

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    hm, ik zou het zo doen:

    eerst je regex op [ url ] tags toepassen, dan bekom je voor die dingen enkel nog zaken als:

    Code:
    <a href="http://site.com">MIJN SITE</a>
    En dan doe je je regex voor zaken zonder [ url ]-tags, waarin je gewoon checkt of er een spatie (of newline) voorstaat of niet.

    Het enige waar je dan op moet letten is dat je dit juist omzet:

    [ url ] http://mijnsite.com\[/ url ]
    naar:
    <a href="http://mijnsite.com">&nbsp;http://mijnsite.com</a>
    of:
    <a href="http://mijnsite.com">http://mijnsite.com</a>
    maar niet:
    <a href="http://mijnsite.com"> http://mijnsite.com</a>

    dan zou het moeten werken

    edit: denk da ze die methode vo phpbb gebruiken (daar heb ek ze toch is gelezen).
    Last edited by killgore; 15-05-2004 at 12:36.
    no votes  

  3. #3
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    neen

    stel dat bijvoorbeeld "kern" moet vervangen worden in "blabla kernwoord blabla". Dan moet er dit ontstaan:

    blabla [ url=http://www.shit.be]kern[/url]woord blabla

    dus controleren of er een spatie voor of na staat, kan niet, want ook stukken van een woord moeten veranderd kunnen worden.

    de regexp laat ik al lopen bij het wegschrijven naar de database, omdat ze zo maar 1 maal moet uitgevoerd worden. Bij elke pageview die strings gaan checken en vervangen, da is nogal nutteloos é.

    edit: denk da ze die methode vo phpbb gebruiken (daar heb ek ze toch is gelezen).
    keb et net ff geprobeerd, den output is gewoon letterlijk den input: [ url=dgdfgdfg][ url=ghjghjghj]sdfsfsd[/url][/url]
    no votes  

  4. #4
    servi's Avatar
    Registered
    01/07/02
    Location
    Zolder
    Posts
    2,487
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    moderator noot :
    je topic bevat geen prefix, een verkeerd prefix of heeft een onduidelijke titel.
    Gelieve een duidelijke titel met een bijhorend correct prefix te gebruiken.
    Voor meer informatie over prefixen kan je terecht op regels en prefixen !!!.
    Je topic is aangepast, gelieve in het vervolg er op te letten.


    en probeer dit eens :

    PHP Code:
        $invoer htmlspecialchars($invoer,ENT_QUOTES);
        
    // maak urls, herlopen, anders kan hij 2 urls die direct achtereen komen niet herkennen !
        
    for ($i 0$i $i++ ) {
            
    $invoer preg_replace("#([ \r\n]+)([0-9a-z.\-_]{3,128})(@)([0-9a-z.\-_]{4,128})([ \n\r]+)#Ui",'\\1mailto:\\2\\3\\4\\5',$invoer);
            
    $invoer preg_replace("#([ \r\n]+)(www\.)(.+)([ \n\r]+)#Ui",'\\1http://\\2\\3\\4',$invoer);
            
    $invoer preg_replace("#([ \r\n]+)(mailto:|http://|ftp://)(.+)([ \n\r]+)#Ui",'\\1<a href="\\2\\3">\\3</a>\\4',$invoer);
        }
        
    $invoer preg_replace("#(\[url\])(http://|ftp://|mailto:)(.*)(\[/url\])#Ui",'<a href="\\2\\3">\\3</a>',$invoer);
        
    $invoer preg_replace("#(\[url=)(.*)(])(.*)(\[/url\])#Ui",'<a href="\\2">\\4</a>',$invoer); 
    normaalgezien zou dat volgende vormen correct moeten omzetten
    www.blabla.be
    http://www.blabla.be
    [ url = http://www.blabla.be/ ] blabla [ /url ] ( extra spaties toegevoegd)
    [ url ] http://www.blabla.be [ /url ]
    no votes  

  5. #5
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Quote Originally Posted by servi
    This quote is hidden because you are ignoring this member. Show
    moderator noot :
    je topic bevat geen prefix, een verkeerd prefix of heeft een onduidelijke titel.
    Gelieve een duidelijke titel met een bijhorend correct prefix te gebruiken.
    Voor meer informatie over prefixen kan je terecht op regels en prefixen !!!.
    Je topic is aangepast, gelieve in het vervolg er op te letten.


    en probeer dit eens :

    PHP Code:
        $invoer htmlspecialchars($invoer,ENT_QUOTES);
        
    // maak urls, herlopen, anders kan hij 2 urls die direct achtereen komen niet herkennen !
        
    for ($i 0$i $i++ ) {
            
    $invoer preg_replace("#([ \r\n]+)([0-9a-z.\-_]{3,128})(@)([0-9a-z.\-_]{4,128})([ \n\r]+)#Ui",'\\1mailto:\\2\\3\\4\\5',$invoer);
            
    $invoer preg_replace("#([ \r\n]+)(www\.)(.+)([ \n\r]+)#Ui",'\\1http://\\2\\3\\4',$invoer);
            
    $invoer preg_replace("#([ \r\n]+)(mailto:|http://|ftp://)(.+)([ \n\r]+)#Ui",'\\1<a href="\\2\\3">\\3</a>\\4',$invoer);
        }
        
    $invoer preg_replace("#(\[url\])(http://|ftp://|mailto:)(.*)(\[/url\])#Ui",'<a href="\\2\\3">\\3</a>',$invoer);
        
    $invoer preg_replace("#(\[url=)(.*)(])(.*)(\[/url\])#Ui",'<a href="\\2">\\4</a>',$invoer); 
    normaalgezien zou dat volgende vormen correct moeten omzetten
    www.blabla.be
    http://www.blabla.be
    [ url = http://www.blabla.be/ ] blabla [ /url ] ( extra spaties toegevoegd)
    [ url ] http://www.blabla.be [ /url ]
    Wat gij hier doet, doet phpBB tijdens het uitlezen van de database. wat ik wil is dat bepaalde woorden in [ url= ] -tags gestoken worden, BEHALVE als ze al in een url of img tag zitten... en dit moet gebeuren VOOR de string in de database wordt geplaatst. Der er is nog absoluut geen sprake van replace naar <a href=....

    Praktisch voorbeeld:

    je topic bevat geen prefix, een verkeerd [ url]www.prefix.be[/url ] of heeft een onduidelijke titel.
    Gelieve een duidelijke titel met een bijhorend [ url=http://www.blabla.be]correct prefix[/url ] te gebruiken.
    Voor meer informatie over prefixen kan je terecht op regels en prefixen !!!.
    Je topic is aangepast, gelieve in het vervolg er op te letten.
    Stel dat "prefix" vervangen moet worden door een link naar www.kaka.be, BEHALVE als die al in een link zit. Dan moet dit worden:

    je topic bevat geen [ url=http://www.kaka.be]prefix[/url ], een verkeerd [ url]www.prefix.be[/url ] of heeft een onduidelijke titel.
    Gelieve een duidelijke titel met een bijhorend [ url=http://www.blabla.be]correct prefix[/url ] te gebruiken.
    Voor meer informatie over [ url=http://www.kaka.be]prefix[/url ]en kan je terecht op regels en [ url=http://www.kaka.be]prefix[/url ]en !!!.
    Je topic is aangepast, gelieve in het vervolg er op te letten.
    hetgeen onderstreept is is vervangen. Die string moet in den db geplaatst worden. Pas later, bij het uitlezen, worden dan alle url tags vervagen door <a href's>
    no votes  

  6. #6
    sneax's Avatar
    Registered
    25/07/02
    Location
    Aalst
    Posts
    13,457
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/156
    da kunt ge ook wel in phpBB2 code vinden, meer bepeaald zelfs de functie
    make_clickable()

    ik zou zeggen include eenvoudigweg de include files van phpbb2 of als ge geen phpBB2 forum gebruikt, download het en cut de code van make_clickable, ge zult dan waarschijnlijk wel nen hoop functies die in make_clickable gebruikt worden ook moeten opzoeken in phpBB2 en die code ook kopieren
    safir Thom4s
    no votes  

  7. #7
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    kan goe zijn dat het daarmee te maken heeft, maar keb geen flauw idee hoe dak et moe gebruiken

    keb een phpbb forum en ook ne site die bbencode functies van het forum gebruikt.

    alsek het te vervangen woord in ne link zet is de pagina fucked up enzo, omteven waar ik die make_clickable laat toepassen
    no votes  

  8. #8

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by sneax
    This quote is hidden because you are ignoring this member. Show
    da kunt ge ook wel in phpBB2 code vinden, meer bepeaald zelfs de functie
    make_clickable()
    en daar heb ik men uitleg gehaald, die bij mijn weten nog altijd juist is zunne
    no votes  

  9. #9
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Quote Originally Posted by killgore
    This quote is hidden because you are ignoring this member. Show
    en daar heb ik men uitleg gehaald, die bij mijn weten nog altijd juist is zunne
    ja allemaal goed en wel, maar kweet niet hoe ze toe te passen

    [ url=http://www.kernwoord.be]slmkf[/url]

    wordt bij mij dan

    [ url=http://www.[ url=http://www.mijnelink.be]kernwoord[/url].be]slmkf[/url]


    en da zieter nie mooi uit é

    dat is mijn probleem, kernwoord mag enkel maar vervangen worden als het NIET in een url of img tag staat. Nie afkomen me controleren of er een spatie voorstaat want kernwoord in "kernwoorden" moet ook vervangen worden
    no votes  

  10. #10

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by -P|b-SqUeaLeR
    This quote is hidden because you are ignoring this member. Show
    ja allemaal goed en wel, maar kweet niet hoe ze toe te passen

    [ url=http://www.kernwoord.be]slmkf[/url]

    wordt bij mij dan

    [ url=http://www.[ url=http://www.mijnelink.be]kernwoord[/url].be]slmkf[/url]


    en da zieter nie mooi uit é

    dat is mijn probleem, kernwoord mag enkel maar vervangen worden als het NIET in een url of img tag staat. Nie afkomen me controleren of er een spatie voorstaat want kernwoord in "kernwoorden" moet ook vervangen worden
    zoals ik zeg:

    ze doen eerst het volgende:

    alle [ url] -tags omzetten naar iets van het volgende: <a href="link">text</a>
    let op het feit dat voor text geen spatie meer staat .

    daarna zetten ze alle text die aan de regex van url (denk da servi die poste) voldoet en na een spatie/newline komt om naar een url <a href="link">link</a>.
    de regexen zelf zitten in de include file bbcode van het phpbb-forum .
    Omzetten van iets als keyword naar [ url]keyword[/url] zal imho veel ingewikkelder/moeilijker/tijdrovender zijn.
    Last edited by killgore; 17-05-2004 at 17:42.
    no votes  

  11. #11
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Quote Originally Posted by killgore
    This quote is hidden because you are ignoring this member. Show
    Omzetten van iets als keyword naar keyword zal imho veel ingewikkelder/moeilijker/tijdrovender zijn.
    dat is net wat ik wil

    en ik include al de bbcode file van het forum

    Het is voor een sponsor, bepaalde kernwoorden in berichten geplaatst door members van mijn site, moeten vervangen worden door een link naar de website van de sponsor. Ook als dat kernwoord een deel is van een ander woord. Op pureesoiree.be is dat bijvoorbeeld het geval. Op hun forum word alles wat met studenten/studiant te maken heeft, vervangen door een link naar de studiant site. Zo moet het ook bij mij
    no votes  

  12. #12

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    hm , kversta je vraag eigenlijk nu pas deftig .

    zoiets dan:

    "#(?<!\[url\])keyword(?!\[\/url\])#is"

    kleine basis, die je zelf wel moet uitbreiden:

    (?<!\[url\]) ---> kijkt of keyword niet na [ url] tag komt
    (?!\[\/url\]) ----> kijkt of [ /url] niet na keyword komt.

    todo:

    in [ url]akeywordb[/ url] wordt keyword wel weer omgezet naar url tags (met a en b gelijk welk teken, incl. spaties).
    no votes  

  13. #13
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Had ondertss al wat gelezen over "Assertions", maar ik kan niet controleren op het voorafgaan van "[url=...".
    Ik kan controleren of "[url=xyz" (vaste string) voorafgaat, maar "[url=.*" gaat niet:

    Warning: Compilation failed: lookbehind assertion is not fixed length
    no votes  

  14. #14
    sneax's Avatar
    Registered
    25/07/02
    Location
    Aalst
    Posts
    13,457
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/156
    Oh nu snap ik het, ge wilt kernwoorden omzetten naar sponsor links.

    Ik zou gewoon in mysql een lijst maken van woorden die allemaal gekoppeld zijn aan een URL, dan net VOOR ge uw content laat tonen replaced ge elk woord dat in uw mysql lijst voorkomt door een link met dat kernwoord.

    Als ge op uw site aant browsen zijt en ge ziet een woord dat ge denkt dat naar een bepaalde sponsor moet leiden dan add ge da ff aan de database (heel snel), en zo is het ook extreem flexibel.

    Dit is toch wa ge bedoelt? En zo is het toch eenvoudig te maken?
    Last edited by sneax; 17-05-2004 at 22:36.
    safir Thom4s
    no votes  

  15. #15

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by sneax
    This quote is hidden because you are ignoring this member. Show
    Ik haal het gewoon uit de database, heb geen support voor bbcode maar doe gewoon
    $string = make_clickable($string);
    en da marcheerd, $string is gewoon al uwen text van uwe post of whatever

    ik gebruik hierbij GEEN bbcode, dus make_clickalbe doet niks me ofzo, wss moet ge eerst make_clickable doen en dan bbencode of omgekeerd
    nee, da ist niet.

    hij wilt standaard bv. het woord TELENET laten omzetten naar een bb-code van het formaat: [ url=http://breedband.telenet.be]Telenet[/url], maar dit mag niet als het reeds in [ url] tags staat.

    kleine workaround mssch :

    zet eerst gewoon je keyword om naar bb-code, ongeacht nesting.
    en check daarna met een andere regex naar geneste bb-codes en verwijder die nesting. (denk dat dit toch al iets simpeler moet zijn ).

    dus bv.
    PHP Code:
    $text str_replace("telenet","[url=http://breedband.telenet.be]telenet[/url]",$text);
    $text preg_replace("#\[url\](.*?)\[url=(.*?)\](.*?)\[\/url\](.*?)\[\/url\]#is","[url]\\1\\3\\4[/url]",$text); 
    die regex is op 2 min. opgesteld en trekt op geen knoppen, weet ik zelf ook, ma het is ma een idee he.
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in