public function testAttributeEscaping() { $value = new SS_HTML4Value(); $value->setContent('<a href="[]"></a>'); $this->assertEquals('<a href="[]"></a>', $value->getContent(), "'[' character isn't escaped"); $value->setContent('<a href="""></a>'); $this->assertEquals('<a href="""></a>', $value->getContent(), "'\"' character is escaped"); }
public function tidy($content, $stripWord = false) { // Try to use the extension first if (extension_loaded('tidy')) { $tidy = tidy_parse_string($content, array( 'clean' => true, 'output-xhtml' => true, 'show-body-only' => true, 'quote-nbsp' => true, 'wrap' => 0, 'input-encoding' => 'utf8', 'output-encoding' => 'utf8', 'new-blocklevel-tags' => 'article aside audio details figcaption figure footer header hgroup nav section source summary temp track video', 'new-empty-tags' => 'command embed keygen source track wbr', 'new-inline-tags' => 'audio canvas command datalist embed keygen mark meter output progress time video wbr', 'bare' => $stripWord, 'word-2000' => $stripWord )); $tidy->cleanRepair(); return $this->rewriteShortcodes('' . $tidy); } // No PHP extension available, attempt to use CLI tidy. $retval = null; $output = null; @exec('tidy --version', $output, $retval); if ($retval === 0) { $tidy = ''; $input = escapeshellarg($content); // Doesn't work on Windows, sorry, stick to the extension. $tidy = @`echo $input | tidy -q --show-body-only yes --input-encoding utf8 --output-encoding utf8 --wrap 0 --clean yes --output-xhtml yes`; return $this->rewriteShortcodes($tidy); } // Fall back to default $doc = new SS_HTML4Value($content); return $doc->getContent(); }
/** * Fixes URLs in images, link and a tags to refer to correct things relevant to the base tag. * * @param string $contentFile * The name of the file to fix links within */ protected function fixLinks($content) { $value = SS_HTML4Value::create($content); $base = $value->getElementsByTagName('base'); if ($base && $base->item(0)) { $base = $base->item(0)->getAttribute('href'); $check = array('a' => 'href', 'link' => 'href', 'img' => 'src'); foreach ($check as $tag => $attr) { if ($items = $value->getElementsByTagName($tag)) { foreach ($items as $item) { $href = $item->getAttribute($attr); if ($href && $href[0] != '/' && strpos($href, '://') === false) { $item->setAttribute($attr, $base . $href); } } } } } return $value->getContent(); }