diff --git a/library/HTMLPurifier/Definition.php b/library/HTMLPurifier/Definition.php
index 0965bc69..9223a440 100644
--- a/library/HTMLPurifier/Definition.php
+++ b/library/HTMLPurifier/Definition.php
@@ -6,6 +6,7 @@ require_once 'HTMLPurifier/AttrDef.php';
require_once 'HTMLPurifier/ChildDef.php';
require_once 'HTMLPurifier/Generator.php';
require_once 'HTMLPurifier/Token.php';
+require_once 'HTMLPurifier/TagTransform.php';
/**
* Defines the purified HTML type with large amounts of objects.
@@ -39,6 +40,9 @@ class HTMLPurifier_Definition
// used solely by HTMLPurifier_Strategy_FixNesting
var $info_parent = 'div';
+ // used solely by HTMLPurifier_Strategy_RemoveForeignElements
+ var $info_tag_transform = array();
+
function instance() {
static $instance = null;
if (!$instance) {
@@ -212,6 +216,11 @@ class HTMLPurifier_Definition
// dir -> ul
// center -> div / css: text-align: center;
+ //$this->info_tag_transform['font'] = new HTMLPurifier_TagTransform_Font();
+ $this->info_tag_transform['menu'] = new HTMLPurifier_TagTransform_Simple('ul');
+ $this->info_tag_transform['dir'] = new HTMLPurifier_TagTransform_Simple('ul');
+ $this->info_tag_transform['center'] = new HTMLPurifier_TagTransform_Center();
+
//////////////////////////////////////////////////////////////////////
// info[]->auto_close : tags that automatically close another
diff --git a/library/HTMLPurifier/Strategy/RemoveForeignElements.php b/library/HTMLPurifier/Strategy/RemoveForeignElements.php
index ff8eb001..1f55b512 100644
--- a/library/HTMLPurifier/Strategy/RemoveForeignElements.php
+++ b/library/HTMLPurifier/Strategy/RemoveForeignElements.php
@@ -3,6 +3,7 @@
require_once 'HTMLPurifier/Strategy.php';
require_once 'HTMLPurifier/Definition.php';
require_once 'HTMLPurifier/Generator.php';
+require_once 'HTMLPurifier/TagTransform.php';
/**
* Removes all unrecognized tags from the list of tokens.
@@ -27,7 +28,18 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy
foreach($tokens as $token) {
if (!empty( $token->is_tag )) {
// DEFINITION CALL
- if (!isset($this->definition->info[$token->name])) {
+ if (isset($this->definition->info[$token->name])) {
+ // leave untouched
+ } elseif (
+ isset($this->definition->info_tag_transform[$token->name])
+ ) {
+ // there is a transformation for this tag
+ // DEFINITION CALL
+ $token = $this->
+ definition->
+ info_tag_transform[$token->name]->
+ transform($token);
+ } else {
// invalid tag, generate HTML and insert in
$token = new HTMLPurifier_Token_Text(
$this->generator->generateFromToken($token)
diff --git a/library/HTMLPurifier/TagTransform.php b/library/HTMLPurifier/TagTransform.php
new file mode 100644
index 00000000..230c348a
--- /dev/null
+++ b/library/HTMLPurifier/TagTransform.php
@@ -0,0 +1,88 @@
+transform_to = $transform_to;
+ }
+
+ function transform($tag) {
+ switch ($tag->type) {
+ case 'end':
+ $new_tag = new HTMLPurifier_Token_End($this->transform_to);
+ break;
+ case 'start':
+ $new_tag = new HTMLPurifier_Token_Start($this->transform_to,
+ $tag->attributes);
+ break;
+ case 'empty':
+ $new_tag = new HTMLPurifier_Token_Empty($this->transform_to,
+ $tag->attributes);
+ break;
+ default:
+ trigger_error('Failed tag transformation', E_USER_WARNING);
+ return;
+ }
+ return $new_tag;
+ }
+
+}
+
+class HTMLPurifier_TagTransform_Center extends HTMLPurifier_TagTransform
+{
+ function transform($tag) {
+ $attributes = $this->normalizeAttributes($tag->attributes);
+ $prepend_css = 'text-align:center;';
+ if (isset($attributes['style'])) {
+ $attributes['style'] = $prepend_css . $attributes['style'];
+ } else {
+ $attributes['style'] = $prepend_css;
+ }
+ switch ($tag->type) {
+ case 'end':
+ $new_tag = new HTMLPurifier_Token_End('div');
+ break;
+ case 'start':
+ $new_tag = new HTMLPurifier_Token_Start('div', $attributes);
+ break;
+ case 'empty':
+ $new_tag = new HTMLPurifier_Token_Empty('div', $attributes);
+ break;
+ default:
+ trigger_error('Failed tag transformation', E_USER_WARNING);
+ return;
+ }
+ return $new_tag;
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php b/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php
index 1d2741c6..3fe26452 100644
--- a/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php
+++ b/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php
@@ -24,6 +24,14 @@ class HTMLPurifier_Strategy_RemoveForeignElementsTest
$inputs[2] = '