-
15-05-2004, 02:20 #1Member
- 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:
MAAR:PHP Code:$string = preg_replace("/(kernwoord)/","[url=http://www.blabla.be]\\1[/url]",$string);
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?
thxno votes
-
-
15-05-2004, 12:34 #2Member
- 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:
En dan doe je je regex voor zaken zonder [ url ]-tags, waarin je gewoon checkt of er een spatie (of newline) voorstaat of niet.Code:<a href="http://site.com">MIJN SITE</a>
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"> 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
-
15-05-2004, 12:43 #3Member
- 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 é.
keb et net ff geprobeerd, den output is gewoon letterlijk den input: [ url=dgdfgdfg][ url=ghjghjghj]sdfsfsd[/url][/url]edit: denk da ze die methode vo phpbb gebruiken (daar heb ek ze toch is gelezen).no votes
-
15-05-2004, 15:06 #4
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 :
normaalgezien zou dat volgende vormen correct moeten omzettenPHP Code:$invoer = htmlspecialchars($invoer,ENT_QUOTES);
// maak urls, herlopen, anders kan hij 2 urls die direct achtereen komen niet herkennen !
for ($i = 0; $i < 2 ; $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);
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
-
15-05-2004, 15:41 #5Member
- Registered
- 17/07/02
- Location
- Kruishoutem
- Posts
- 4,442
- iTrader
- 6 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/55
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:
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 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.
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>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.no votes
-
16-05-2004, 15:13 #6Approved 9-lifer
- 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 kopierensafir Thom4sno votes
-
16-05-2004, 16:41 #7Member
- 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 toepassenno votes
-
16-05-2004, 22:25 #8Member
- Registered
- 12/10/02
- Location
- mars
- Posts
- 14,319
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
no votes
-
16-05-2004, 22:36 #9Member
- Registered
- 17/07/02
- Location
- Kruishoutem
- Posts
- 4,442
- iTrader
- 6 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/55
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 wordenno votes
-
16-05-2004, 22:45 #10Member
- Registered
- 12/10/02
- Location
- mars
- Posts
- 14,319
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
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
-
16-05-2004, 23:22 #11Member
- Registered
- 17/07/02
- Location
- Kruishoutem
- Posts
- 4,442
- iTrader
- 6 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/55
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 mijLast edited by Squealer; 16-05-2004 at 23:26.
no votes
-
17-05-2004, 18:22 #12Member
- 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
-
17-05-2004, 19:46 #13Member
- 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 lengthno votes
-
17-05-2004, 22:32 #14Approved 9-lifer
- 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 Thom4sno votes
-
17-05-2004, 22:52 #15Member
- Registered
- 12/10/02
- Location
- mars
- Posts
- 14,319
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
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.
die regex is op 2 min. opgesteld en trekt op geen knoppen, weet ik zelf ook, ma het is ma een idee he.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);
no votes
