email_enabled != '1') return false;
return true;
}
function obfuscate($str) {
static $obfuscate_id = 0;
$out = '';
for ($i = 0; $i < strlen($str); $i++) {
$out .= '' . ord(substr($str, $i, 1)) . ';';
}
$out2 = '';
for ($i = 0; $i < strlen($out); $i++) {
$out2 = substr($out, $i, 1) . $out2;
}
$output = "";
$obfuscate_id++;
return $output;
}
function _obfuscate_element($element) {
return obfuscate($element->outertext);
}
function find_emails($str) {
preg_match_all('/[a-zA-Z0-9_\-\+\.]+@[a-zA-Z0-9\-]+\.([a-z]{2,4})(?:\.[a-z]{2})?/i', $str, $matches, PREG_OFFSET_CAPTURE);
if (!is_array($matches) || empty($matches)) return false;
$return = array();
foreach ($matches[0] as $match) {
$return[] = array(
'text' => $match[0],
'pos' => $match[1],
'len' => strlen($match[0]),
);
}
return $return;
}
function filter($content) {
// Parse content
$html = new HtmlDocument();
$html->load('
' . $content . '
');
//_filter_html($html->find('div[id=dom_root]', 0));
$html->find('div[id=dom_root]', 0)->outertext = _filter_html($html->find('div[id=dom_root]', 0));
$html->find('div[id=dom_root]', 0)->outertext = $html->find('div[id=dom_root]', 0)->innertext; // remove root div wrapper
$content = $html->save();
// Clean up memory
$html->clear();
unset($html);
return $content;
}
function _filter_html($element) {
if ($element == null) return false;
switch ($element->tag) {
case 'a':
if (_test_anchor($element)) {
return _obfuscate_element($element);
} else {
return $element->outertext;
}
default:
$node = _get_text_node($element);
$node['text'] = _filter_text($node['text']);
foreach ($node['tags'] as &$tag) {
$tag['content'] = _filter_html($tag['element']);
}
$element->outertext = _set_text_node($node);
return $element->outertext;
}
}
function _filter_text($text) {
$emails = find_emails($text);
if (!$emails) return $text;
for ($i = count($emails) - 1; $i >= 0; $i--) {
$text = substr($text, 0, $emails[$i]['pos']) . obfuscate($emails[$i]['text']) . substr($text, $emails[$i]['pos'] + $emails[$i]['len']);
}
return $text;
}
function _get_text_node($element) {
//$tag_pattern = '/<\s*[a-zA-Z]+[^>]*>.*?<\s*\/\s*[a-zA-Z]+>/is'
$text = $element->outertext;
$return = array(
'raw' => $text,
'text' => '',
'tags' => array(),
);
$i = 0;
foreach ($element->children() as $child) {
$return['tags'][$i] = array(
'element' => $child,
'index' => $i,
'key' => "[[{$i}]]",
'content' => $child->outertext,
'pos' => strpos($text, $child->outertext),
'len' => strlen($child->outertext),
);
$text = str_replace($child->outertext, "[[{$i}]]", $text);
$i++;
}
$return['text'] = $text;
return $return;
}
function _set_text_node($node) {
$text = $node['text'];
foreach ($node['tags'] as $tag) {
$text = str_replace($tag['key'], $tag['content'], $text);
}
return $text;
}
function _test_anchor($element) {
if ($element->tag != 'a') return false;
return preg_match('/[a-zA-Z0-9_\-\+\.]+@[a-zA-Z0-9\-]+\.([a-z]{2,4})(?:\.[a-z]{2})?<\/a>/i', $element->outertext) == 1;
}