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 ?
' /':
'' )
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)) {
245 public function escape($string, $quote = null) {
248 if ($quote === null) $quote = ENT_COMPAT;
249 return htmlspecialchars($string, $quote,
'UTF-8');