<?php
class Filter {
protected $pattern;
protected $repl;
function __construct($pattern, $repl) {
$this->pattern = $pattern;
$this->repl = $repl;
}
function filter($data) {
return preg_replace($this->pattern, $this->repl, $data);
}
};
class Post {
protected $title;
protected $text;
protected $filters;
function __construct($title, $text, $filters) {
$this->title = $title;
$this->text = $text;
$this->filters = $filters;
}
function get_title() {
return htmlspecialchars($this->title);
}
function display_post() {
$text = htmlspecialchars($this->text);
foreach ($this->filters as $filter)
$text = $filter->filter($text);
return $text;
}
function __destruct() {
// debugging stuff
$s = "<!-- POST " . htmlspecialchars($this->title);
$text = htmlspecialchars($this->text);
foreach ($this->filters as $filter)
$text = $filter->filter($text);
$s = $s . ": " . $text;
$s = $s . " -->";
echo $s;
}
};
$standard_filter_set = [new Filter("/\[i\](.*)\[\/i\]/i", "<i>\\1</i>"),
new Filter("/\[b\](.*)\[\/b\]/i", "<b>\\1</b>"),
new Filter("/\[img\](.*)\[\/img\]/i", "<img src='\\1'>"),
new Filter("/\[br\]/i", "<br>")];
echo serialize(new Post("hue", "br", [new Filter("/get shrekt/", "get rekt"), new Filter("/hue/", "br")] ));
echo urldecode(urldecode("b%253A1%253B%2580%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2560%250AO%253A4%253A%2522Post%2522%253A3%253A%257Bs%253A8%253A%2522%252Atitle%2522%253Bs%253A3%253A%2522hue%2522%253Bs%253A7%253A%2522%252Atext%2522%253Bs%253A2%253A%2522br%2522%253Bs%253A10%253A%2522%252Afilters%2522%253Ba%253A2%253A%257Bi%253A0%253BO%253A6%253A%2522Filter%2522%253A2%253A%257Bs%253A10%253A%2522%252Apattern%2522%253Bs%253A12%253A%2522/get%2520shrekt/%2522%253Bs%253A7%253A%2522%252Arepl%2522%253Bs%253A8%253A%2522get%2520rekt%2522%253B%257Di%253A1%253BO%253A6%253A%2522Filter%2522%253A2%253A%257Bs%253A10%253A%2522%252Apattern%2522%253Bs%253A5%253A%2522/hue/%2522%253Bs%253A7%253A%2522%252Arepl%2522%253Bs%253A2%253A%2522br%2522%253B%257D%257D%257D"));
preferences:
38.95 ms | 402 KiB | 5 Q