par
NightAngel » 17 août 2005, 14:40
Voici le inc_cg_filter.php
<?php
// ***************************************************************
// Date: 08/08/2005 - File name: inc_cg_filter.php
// Version: 1.02
//
// This is the Coolguys HTML filter class.
//
// It contains BBCode to HTML and HTML to BBCode converters,
// HTML filtering functions, URL and smiley parsing.
// ***************************************************************
class cg_filter {
var $string;
var $smiley_path = '../images/smileys/'; // Do not forget trailing '/'
var $html_filter_prefs = array('entities' => 1, 'nl2br' => 1, 'url_parsing' => 1, 'smileys' => 1); // By default, apply all filtering
function bbcode_to_html() {
// ***************************************************************
// This function parses BBCode into HTML.
// ***************************************************************
$pos = strpos($this->string, '[');
while ($pos !== FALSE) {
$len = strpos($this->string, ']', $pos + 1) - $pos + 1;
if ($len) { // No need to continue is there is no ]
$rest = explode('=', substr($this->string, $pos + 1, $len - 2), 2);
$tag = $rest[0];
if (($pos2 = strpos($this->string, "[/$tag]", $pos + $len)) === FALSE) { // No end tag
$tag = NULL;
} else {
$param_name = substr($this->string, $pos + $len, $pos2 - $pos - $len);
$len2 = strpos($this->string, ']', $pos2 + 1) - $pos2 + 1;
}
switch($tag) {
case 'i':
case 'u':
case 'b':
case 's':
$this->string = substr_replace($this->string, "<$tag>", $pos, $len);
$this->string = substr_replace($this->string, "</$tag>", $pos2, $len + 1);
break;
case 'img':
$replace_str = '<img src="' . $param_name . '" alt="' . basename($param_name) . '" />';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'url':
if (!$rest[1])
$rest[1] = $param_name;
$target = NULL;
if (substr($rest[1], 0, 7) == 'http://')
$target = ' target="_blank"';
if ($param_name)
$replace_str = '<a href="' . $rest[1] . '"' . $target . '>' . $param_name . '</a>';
else
$replace_str = '<a href="' . $rest[1] . '"' . $target . '>' . $rest[1] . '</a>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'align':
$replace_str = '<div align="' . $rest[1] . '">' . $param_name . '</div>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'list':
$pos_del = strpos($param_name, '[*]');
$param_name = substr_replace($param_name, '', 0, $pos_del + 3); // Ignore first [*]
$replace_str = '<ul><li>';
$replace_str .= str_replace('[*]', '</li><li>', $param_name);
$replace_str .= '</li></ul>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'code':
case 'quote':
$replace_str = '<div class="' . $tag . '">' . $param_name . '</div>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'anchor':
$replace_str = '<a name="' . $param_name . '"></a>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
default:
// Prevents infinite loops should the string contain "[" char without it being a BBCode
$pos++;
break;
}
}
// Repeat
$pos = strpos($this->string, '[', $pos);
}
}
function html_to_bbcode() {
// ***************************************************************
// This function parses HTML into BBCode.
// ***************************************************************
$open_tags = array ();
$pos = strpos($this->string, '<');
while ($pos !== FALSE) {
$len = strpos($this->string, '>', $pos + 1) - $pos + 1;
if ($len) { // No need to continue is there is no >
$rest = explode('=', substr($this->string, $pos + 1, $len - 2), 2);
$tag = explode(' ', $rest[0]);
$tag = $tag[0];
if (($pos2 = strpos($this->string, "</$tag>", $pos + $len)) === FALSE) { // No end tag
// Let's see if it's a tag without end tag, i.e. <br />, or </div>
$ok_tags = array ('</div>');
if (!in_array(substr($this->string, $pos, $len), $ok_tags) && strpos($this->string, '/>', $pos + 1) === FALSE)
$rest[0] = NULL;
} else {
$param_name = substr($this->string, $pos + $len, $pos2 - $pos - $len);
$len2 = strpos($this->string, '>', $pos2 + 1) - $pos2 + 1;
}
switch($rest[0]) {
case 'i':
case 'u':
case 'b':
case 's':
$this->string = substr_replace($this->string, "[$tag]", $pos, $len);
$this->string = substr_replace($this->string, "[/$tag]", $pos2, $len + 1);
break;
case 'a href':
$link = explode('"', $rest[1]);
$replace_str = '[url=' . $link[1]. ']' . $param_name . '[/url]';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'a name':
$link = explode('"', $rest[1]);
$replace_str = '[anchor]' . $link[1] . '[/anchor]';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'div align':
$link = explode('"', $rest[1]);
array_push($open_tags, 'align');
$replace_str = '[align=' . $link[1] . ']' . $param_name;
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 - $pos);
break;
case 'div class':
$link = explode('"', $rest[1]);
array_push($open_tags, $link[1]);
$replace_str = '[' . $link[1] . ']' . $param_name;
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 - $pos);
break;
case '/div':
if (count($open_tags) > 0)
$replace_str = '[/' . array_pop($open_tags) . ']';
else
$replace_str = '';
$this->string = substr_replace($this->string, $replace_str, $pos, 6);
break;
case 'img src':
$link = explode('"', $rest[1]);
$replace_str = '[img]'%20.%20$link[1]%20.%20'[/img]';
$this->string = substr_replace($this->string, $replace_str, $pos, $len);
break;
case 'br /':
$replace_str = '';
$this->string = substr_replace($this->string, $replace_str, $pos, $len);
break;
case 'ul':
$replace_str = '[list]' . $param_name . '[/list]';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'li':
$replace_str = '[*]' . $param_name;
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
default:
// Prevents infinite loops should the string contain "<" char without it being html
$pos++;
break;
}
}
// Repeat
$pos = strpos($this->string, '<', $pos);
}
// Close any open tags, in case the html contains errors
if (count($open_tags) > 0) {
foreach($open_tags as $value) {
$this->string .= '[/' . array_pop($open_tags) . ']';
}
}
}
function html_filter() {
// ***************************************************************
// This function provides basic html filtering.
// By default, all rules are applied; should you require to
// disable some rules, the html_filter_prefs array can be used.
//
// Ex: $my_class->html_filter_prefs['smileys'] = 0; // No smileys
// ***************************************************************
// First we make sure there is not html
if ($this->html_filter_prefs['entities'])
$this->string = htmlspecialchars($this->string, ENT_NOQUOTES);
// Smileys
if ($this->html_filter_prefs['smileys']) {
$smileys = array (':)' => 0, ':-)' => 0, ';)' => 1, ';-)' => 1, ':D' => 2, ':-D' => 2, ':P' => 3, ':-P' => 3, ':p' => 3, ':-p' => 3, ':(' => 4, ':-(' => 4);
$filename = array('happy.gif', 'wink.gif', 'biggrin.gif', 'tongue.gif', 'sad.gif');
foreach ($smileys as $key => $value) {
$img_url = '<img src="' . $this->smiley_path . $filename[$value] . '" alt="' . $key . '" />';
$this->string = str_replace($key, $img_url, $this->string);
}
}
// This automatically converts new lines and tabs
if ($this->html_filter_prefs['nl2br']) {
$this->string = nl2br($this->string);
$this->string = str_replace("\t", ' ', $this->string);
}
// Automatic URL parsing
if ($this->html_filter_prefs['url_parsing']) {
// For 'http://example.com/?id=' type links
$this->string = ereg_replace('[ ]+([a-z]+://[-a-z0-9A-Z&_\/\.\?\=]+)[ ]+', ' <a href="\\1" target="_blank">\\1</a> ', $this->string);
// For 'www.example.com' type links
$this->string = ereg_replace('[ ]+(www\.[-a-z0-9A-Z\.]+\.[-a-z0-9A-Z&_\/\.\?\=]+)[ ]+', ' <a href="http://\\1" target="_blank">http://\\1</a> ', $this->string);
}
}
}
?>
Voici le inc_cg_filter.php
[php]
<?php
// ***************************************************************
// Date: 08/08/2005 - File name: inc_cg_filter.php
// Version: 1.02
//
// This is the Coolguys HTML filter class.
//
// It contains BBCode to HTML and HTML to BBCode converters,
// HTML filtering functions, URL and smiley parsing.
// ***************************************************************
class cg_filter {
var $string;
var $smiley_path = '../images/smileys/'; // Do not forget trailing '/'
var $html_filter_prefs = array('entities' => 1, 'nl2br' => 1, 'url_parsing' => 1, 'smileys' => 1); // By default, apply all filtering
function bbcode_to_html() {
// ***************************************************************
// This function parses BBCode into HTML.
// ***************************************************************
$pos = strpos($this->string, '[');
while ($pos !== FALSE) {
$len = strpos($this->string, ']', $pos + 1) - $pos + 1;
if ($len) { // No need to continue is there is no ]
$rest = explode('=', substr($this->string, $pos + 1, $len - 2), 2);
$tag = $rest[0];
if (($pos2 = strpos($this->string, "[/$tag]", $pos + $len)) === FALSE) { // No end tag
$tag = NULL;
} else {
$param_name = substr($this->string, $pos + $len, $pos2 - $pos - $len);
$len2 = strpos($this->string, ']', $pos2 + 1) - $pos2 + 1;
}
switch($tag) {
case 'i':
case 'u':
case 'b':
case 's':
$this->string = substr_replace($this->string, "<$tag>", $pos, $len);
$this->string = substr_replace($this->string, "</$tag>", $pos2, $len + 1);
break;
case 'img':
$replace_str = '<img src="' . $param_name . '" alt="' . basename($param_name) . '" />';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'url':
if (!$rest[1])
$rest[1] = $param_name;
$target = NULL;
if (substr($rest[1], 0, 7) == 'http://')
$target = ' target="_blank"';
if ($param_name)
$replace_str = '<a href="' . $rest[1] . '"' . $target . '>' . $param_name . '</a>';
else
$replace_str = '<a href="' . $rest[1] . '"' . $target . '>' . $rest[1] . '</a>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'align':
$replace_str = '<div align="' . $rest[1] . '">' . $param_name . '</div>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'list':
$pos_del = strpos($param_name, '[*]');
$param_name = substr_replace($param_name, '', 0, $pos_del + 3); // Ignore first [*]
$replace_str = '<ul><li>';
$replace_str .= str_replace('[*]', '</li><li>', $param_name);
$replace_str .= '</li></ul>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'code':
case 'quote':
$replace_str = '<div class="' . $tag . '">' . $param_name . '</div>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'anchor':
$replace_str = '<a name="' . $param_name . '"></a>';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
default:
// Prevents infinite loops should the string contain "[" char without it being a BBCode
$pos++;
break;
}
}
// Repeat
$pos = strpos($this->string, '[', $pos);
}
}
function html_to_bbcode() {
// ***************************************************************
// This function parses HTML into BBCode.
// ***************************************************************
$open_tags = array ();
$pos = strpos($this->string, '<');
while ($pos !== FALSE) {
$len = strpos($this->string, '>', $pos + 1) - $pos + 1;
if ($len) { // No need to continue is there is no >
$rest = explode('=', substr($this->string, $pos + 1, $len - 2), 2);
$tag = explode(' ', $rest[0]);
$tag = $tag[0];
if (($pos2 = strpos($this->string, "</$tag>", $pos + $len)) === FALSE) { // No end tag
// Let's see if it's a tag without end tag, i.e. <br />, or </div>
$ok_tags = array ('</div>');
if (!in_array(substr($this->string, $pos, $len), $ok_tags) && strpos($this->string, '/>', $pos + 1) === FALSE)
$rest[0] = NULL;
} else {
$param_name = substr($this->string, $pos + $len, $pos2 - $pos - $len);
$len2 = strpos($this->string, '>', $pos2 + 1) - $pos2 + 1;
}
switch($rest[0]) {
case 'i':
case 'u':
case 'b':
case 's':
$this->string = substr_replace($this->string, "[$tag]", $pos, $len);
$this->string = substr_replace($this->string, "[/$tag]", $pos2, $len + 1);
break;
case 'a href':
$link = explode('"', $rest[1]);
$replace_str = '[url=' . $link[1]. ']' . $param_name . '[/url]';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'a name':
$link = explode('"', $rest[1]);
$replace_str = '[anchor]' . $link[1] . '[/anchor]';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'div align':
$link = explode('"', $rest[1]);
array_push($open_tags, 'align');
$replace_str = '[align=' . $link[1] . ']' . $param_name;
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 - $pos);
break;
case 'div class':
$link = explode('"', $rest[1]);
array_push($open_tags, $link[1]);
$replace_str = '[' . $link[1] . ']' . $param_name;
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 - $pos);
break;
case '/div':
if (count($open_tags) > 0)
$replace_str = '[/' . array_pop($open_tags) . ']';
else
$replace_str = '';
$this->string = substr_replace($this->string, $replace_str, $pos, 6);
break;
case 'img src':
$link = explode('"', $rest[1]);
$replace_str = '[img]'%20.%20$link[1]%20.%20'[/img]';
$this->string = substr_replace($this->string, $replace_str, $pos, $len);
break;
case 'br /':
$replace_str = '';
$this->string = substr_replace($this->string, $replace_str, $pos, $len);
break;
case 'ul':
$replace_str = '[list]' . $param_name . '[/list]';
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
case 'li':
$replace_str = '[*]' . $param_name;
$this->string = substr_replace($this->string, $replace_str, $pos, $pos2 + $len2 - $pos);
break;
default:
// Prevents infinite loops should the string contain "<" char without it being html
$pos++;
break;
}
}
// Repeat
$pos = strpos($this->string, '<', $pos);
}
// Close any open tags, in case the html contains errors
if (count($open_tags) > 0) {
foreach($open_tags as $value) {
$this->string .= '[/' . array_pop($open_tags) . ']';
}
}
}
function html_filter() {
// ***************************************************************
// This function provides basic html filtering.
// By default, all rules are applied; should you require to
// disable some rules, the html_filter_prefs array can be used.
//
// Ex: $my_class->html_filter_prefs['smileys'] = 0; // No smileys
// ***************************************************************
// First we make sure there is not html
if ($this->html_filter_prefs['entities'])
$this->string = htmlspecialchars($this->string, ENT_NOQUOTES);
// Smileys
if ($this->html_filter_prefs['smileys']) {
$smileys = array (':)' => 0, ':-)' => 0, ';)' => 1, ';-)' => 1, ':D' => 2, ':-D' => 2, ':P' => 3, ':-P' => 3, ':p' => 3, ':-p' => 3, ':(' => 4, ':-(' => 4);
$filename = array('happy.gif', 'wink.gif', 'biggrin.gif', 'tongue.gif', 'sad.gif');
foreach ($smileys as $key => $value) {
$img_url = '<img src="' . $this->smiley_path . $filename[$value] . '" alt="' . $key . '" />';
$this->string = str_replace($key, $img_url, $this->string);
}
}
// This automatically converts new lines and tabs
if ($this->html_filter_prefs['nl2br']) {
$this->string = nl2br($this->string);
$this->string = str_replace("\t", ' ', $this->string);
}
// Automatic URL parsing
if ($this->html_filter_prefs['url_parsing']) {
// For 'http://example.com/?id=' type links
$this->string = ereg_replace('[ ]+([a-z]+://[-a-z0-9A-Z&_\/\.\?\=]+)[ ]+', ' <a href="\\1" target="_blank">\\1</a> ', $this->string);
// For 'www.example.com' type links
$this->string = ereg_replace('[ ]+(www\.[-a-z0-9A-Z\.]+\.[-a-z0-9A-Z&_\/\.\?\=]+)[ ]+', ' <a href="http://\\1" target="_blank">http://\\1</a> ', $this->string);
}
}
}
?>[/php]