cakephp - Applying a CSS whitelist to HTML in PHP -


lets have following $string...

<span style='text-decoration:underline; display:none;'>some text</span> 

i want allow style text-decoration, want php function following...

$string = stripstyles($string, array("text-decoration")); 

similar strip_tags, using array instead. $string be...

<span style='text-decoration:underline;'>some text</span> 

i using cake, if can done sanitize better.

this tricky, should able domdocument. should started, it's require serious tweaking.

// load html string $dom = new domdocument(); $dom->loadhtml($your_html_string);  // <span> tags $spans = $dom->getelementsbytagname("span");  // loop on span tags foreach($spans $span) {    // if have style attribute contains "text-decoration:"   // attempt replace contents of style attribute text-decoration component.   if ($style = $span->getattribute("style")) {     if (preg_match('/text-decoration:([^;]*);/i', $style)) {       $span->setattribute("style", preg_replace('/^(.*)text-decoration:([^;]*);(.*)$/i', "text-decoration:$2;", $style);     }     // otherwise, erase style attribute     else $span->setattribute("style", "");   } }  $output = $dom->savehtml; 

it's maybe better attempt parse style attributes explode()ing on ;

// replaces inner contents of foreach ($spans $span) above...  // instead of preg_replace() $styles = explode(";", $style); $replaced_style = false; foreach ($styles $s) {  if (preg_match('/text-decoration/', $s) {    $span->setattribute("style", $s);    $replaced_style = true;  }  //  if text-decoration wasn't found, empty out style  if (!$replaced_style) $span->setattribute("style", ""); } 

Comments

Popular posts from this blog

linux - Using a Cron Job to check if my mod_wsgi / apache server is running and restart -

actionscript 3 - TweenLite does not work with object -

jQuery Ajax Render Fragments OR Whole Page -