Filter?

Status
Niet open voor verdere reacties.

LarsL

Gebruiker
Lid geworden
19 sep 2008
Berichten
155
Hallo allemaal, ik heb voor een shoutbox een soort 'regex' filter gemaakt, deze checkt met preg_match functies of het verkeerde code is, echter wil ik alleen de bbcode tags filteren, dat heb ik geprobeerd op de volgende manier:
PHP:
$pattern = array('/[[bius]]/','[glow]', '[size]', '[shadow]', '[move]', '[pre]', '[left]', '[center]', '[right]', '[table]', '[code]', '[url]', '[img]', '[youtube]', '[spoiler]', '[quote]', '[sub]', '[sup]', '[tt]');

Echter resulteerde dat in dat ik als ik al (bijv.) 'code' typte ipv
Code:
 dat hij dan al gefilterd werd, dat moet niet, alleen hoe zorg ik dat hij alleen de tags tussen [ en ] filtert? Ik heb niet veel verstand van deze 'regex codes' en ik hoop dat jullie dit probleem dan ook voor me willen/kunnen oplossen.

Bij voorbaat dank,
- LarsL
 
Zoals je het nu hebt kijkt hij naar de letters apart.
Wat inhoudt dat hij kijkt of die letter voorkomt niet die reeks. (Bij
Code:
 kijkt hij dus naar overkomsten met "c", "o", "d" en "e")

Wat je wilt is dit
[php]
$pattern = array('/[code/]');
[/php]

Zie [url=http://www.helpmij.nl/forum/showthread.php?t=387199][color=red]deze[/color][/url] thread voor meer informatie.
 
Helaas, maar nu krijg ik weer alles gewoon te voorschijn dus kan ik weer afbeeldingen weergeven enzovoort, weet u daar misschien een oplossing op?:(
 
Helaas wat?

Hoe ziet je code er nu uit?
 
PHP:
function shoutfilter($input) {
$pattern = array('/[[bius]]/','/[glow/]', '/[size/]', '/[shadow/]', '/[move/]', '/[pre/]', '[/left/]', '/[center/]', '/[right/]', '/[table/]', '/[code/]', '/[url/]', '/[img/]', '/[youtube/]', '/[spoiler/]', '/[quote/]', '/[sub/]', '/[sup/]', '/[tt/]');
if (preg_match($pattern[0], $input) || (preg_match($pattern[1], $input))  || (preg_match($pattern[2], $input))  || (preg_match($pattern[3], $input))  || (preg_match($pattern[4], $input)) || (preg_match($pattern[5], $input)) || (preg_match($pattern[6], $input)) || (preg_match($pattern[7], $input)) || (preg_match($pattern[8], $input)) || (preg_match($pattern[9], $input)) || (preg_match($pattern[10], $input)) || (preg_match($pattern[11], $input)) || (preg_match($pattern[12], $input)) || (preg_match($pattern[13], $input)) || (preg_match($pattern[14], $input)) || (preg_match($pattern[15], $input)) || (preg_match($pattern[16], $input)) || (preg_match($pattern[17], $input)) || (preg_match($pattern[18], $input))) {
$shoutText = "[i]Deze shouttext is niet toegestaan (filtered by teh Lars filter :P).[/i]";
return $shoutText;
}

Ik weet het, het is zeer onoverzichtelijk, ik zou echter niet weten hoe ik het overzichtelijker kan maken, maar ik focus me liever op een goede werking van deze functie voor ik daar aan begin.
 
Vreemde functie, ten eerste zal hij altijd die regel text zo weergeven omdat je er niets mee doet en hij geeft alleen wat weer als hij iets vindt.

Verder denk ik dat je code om wilt zetten naar HTML dus dan heb je niets aan preg_match() maar zul je preg_replace() moeten gebruiken (Welke gelukkig voor jou een array kan inslikken)

Probeer voorlopig dit:
PHP:
function shoutfilter($input) {
  $pattern = array('/[[bius]]/','/[glow/]', '/[size/]', '/[shadow/]', '/[move/]', '/[pre/]', '[/left/]', '/[center/]', '/[right/]', '/[table/]', '/[code/]', '/[url/]', '/[img/]', '/[youtube/]', '/[spoiler/]', '/[quote/]', '/[sub/]', '/[sup/]', '/[tt/]');
  if (preg_match($pattern[0], $input) || (preg_match($pattern[1], $input))  || (preg_match($pattern[2], $input))  || (preg_match($pattern[3], $input))  || (preg_match($pattern[4], $input)) || (preg_match($pattern[5], $input)) || (preg_match($pattern[6], $input)) || (preg_match($pattern[7], $input)) || (preg_match($pattern[8], $input)) || (preg_match($pattern[9], $input)) || (preg_match($pattern[10], $input)) || (preg_match($pattern[11], $input)) || (preg_match($pattern[12], $input)) || (preg_match($pattern[13], $input)) || (preg_match($pattern[14], $input)) || (preg_match($pattern[15], $input)) || (preg_match($pattern[16], $input)) || (preg_match($pattern[17], $input)) || (preg_match($pattern[18], $input))) { 
    return 'Iets gevonden';
  } else {
    return 'Niets gevonden';
}
$shoutText = "[i]Deze shouttext is niet toegestaan (filtered by teh Lars filter :P).[/i]";
echo shoutfilter($shoutText);
Daarnaast als het goed is resulteert dit "Niets gevonden" (Aangezien er niet in staat)
 
Het hoeft niet perse omgezet te worden naar HTML, ik wil alleen die error ($shoutText) laten weergeven ipv de bbcode dus zodra er gematcht word op een van die bbcodes wil ik dat laten returnen, echter lukt het me niet de pattern zo te krijgen dat de bbcode wordt gefiltert en niet de woorden zelf met (bijv.) /[code/] lukt het niet en word de bbcode gewoon uitgevoerd, met
Code:
 wordt het woord aangepakt (als je dan code typt word het ook gefilterd).
Hoe zorg ik dat ik het toch werkend krijg? (Sorry dat ik zoveel vragen stel).
 
Laatst bewerkt door een moderator:
PHP:
<?php
function checkInput($string) {
  $invalidInput = array('/\[code\]/');
  if(preg_match($invalidInput[0], $string)) {
    return 'Invalid input found!<br />';
  } else {
    return 'This input seems to be valid<br />';
  }
}
//Aanroep
$validString = 'Hier is niets [b]mis[/b] mee';
echo checkInput($validString);
$invalidString = 'Deze [code] moet er niet door komen';
echo checkInput($invalidString);
Verkorte versie, daarnaast moet er bij elke expressie een / aan het begin en aan het eind.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan