61 $this->_scriptFix =
$config->get(
'Output.CommentScriptContents');
62 $this->_innerHTMLFix =
$config->get(
'Output.FixInnerHTML');
63 $this->_sortAttr =
$config->get(
'Output.SortAttr');
64 $this->_flashCompat =
$config->get(
'Output.FlashCompat');
65 $this->_def =
$config->getHTMLDefinition();
66 $this->_xhtml = $this->_def->doctype->xml;
76 if (!$tokens)
return '';
80 for ($i = 0,
$size = count($tokens); $i <
$size; $i++) {
81 if ($this->_scriptFix && $tokens[$i]->name ===
'script'
93 if (extension_loaded(
'tidy') && $this->config->get(
'Output.TidyFormat')) {
95 $tidy->parseString($html, array(
97 'output-xhtml' => $this->_xhtml,
98 'show-body-only' =>
true,
102 $tidy->cleanRepair();
103 $html = (string) $tidy;
107 if ($this->config->get(
'Core.NormalizeNewlines')) {
108 $nl = $this->config->get(
'Output.Newline');
109 if ($nl === null) $nl = PHP_EOL;
110 if ($nl !==
"\n") $html = str_replace(
"\n", $nl, $html);
122 trigger_error(
'Cannot generate HTML from non-HTMLPurifier_Token object', E_USER_WARNING);
127 if ($this->_flashCompat) {
128 if ($token->name ==
"object") {
129 $flash =
new stdclass();
130 $flash->attr = $token->attr;
131 $flash->param = array();
132 $this->_flashStack[] = $flash;
135 return '<' . $token->name . ($attr ?
' ' :
'') . $attr .
'>';
139 if ($this->_flashCompat) {
140 if ($token->name ==
"object" && !empty($this->_flashStack)) {
144 return $_extra .
'</' . $token->name .
'>';
147 if ($this->_flashCompat && $token->name ==
"param" && !empty($this->_flashStack)) {
148 $this->_flashStack[count($this->_flashStack)-1]->param[$token->attr[
'name']] = $token->attr[
'value'];
151 return '<' . $token->name . ($attr ?
' ' :
'') . $attr .
152 ( $this->_xhtml ?
' /':
'' )
156 return $this->
escape($token->data, ENT_NOQUOTES);
159 return '<!--' . $token->data .
'-->';
174 $data = preg_replace(
'#//\s*$#',
'', $token->data);
175 return '<!--//--><![CDATA[//><!--' .
"\n" . trim($data) .
"\n" .
'//--><!]]>';
188 if ($this->_sortAttr) ksort($assoc_array_of_attributes);
189 foreach ($assoc_array_of_attributes as $key => $value) {
190 if (!$this->_xhtml) {
192 if (strpos($key,
':') !==
false)
continue;
194 if ($element && !empty($this->_def->info[$element]->attr[$key]->minimized)) {
220 if ($this->_innerHTMLFix) {
221 if (strpos($value,
'`') !==
false) {
224 if (strcspn($value,
'"\' <>') === strlen($value)) {
230 $html .= $key.
'="'.$this->
escape($value).
'" ';
245 public function escape($string, $quote = null) {
248 if ($quote === null) $quote = ENT_COMPAT;
249 return htmlspecialchars($string, $quote,
'UTF-8');