我使用php的整洁库来“清理和修复”一些来自用户输入的html。php tidy奇怪的行为
一切工作正常,但我遇到了一个问题,我无法弄清楚它是什么原因。我的代码是这样的:
$tidy = new tidy();
$tidy_options = array(
'hide-comments' => true,'tidy-mark' => false, 'indent' => false,
'new-blocklevel-tags' => 'article,footer,header,hgroup,output,progress,section,video',
'new-inline-tags' => 'audio,details,time,ruby,rt,rp',
'drop-empty-paras' => false,
'doctype' => '<!DOCTYPE HTML>',
'sort-attributes' => 'none', 'vertical-space' => false,
'output-xhtml' => true,'wrap' => 180,
'wrap-attributes' => false,
'break-before-br' => false,
'show-body-only' => true
);
$data = $tidy->repairString($data, $tidy_options, 'UTF8');
echo $data;
这适用于各种投入,当我试图使用HTML embeding SWF文件除外。
所以,我试试这个代码:
<object data="http://the_swf_file_url" type="application/x-shockwave-flash" width="853" height="520">
<param name="movie" value="http://the_swf_file_url">
</object>
但repairString条纹关闭所有的它,并返回一个空字符串。
最奇怪的是:
- 如果我上述沿输入一些文字,所以输入就像Hello world<object...>...</object>
然后正常工作。
- 或如果我指定'show-body-only' => false
它也正常工作!
任何线索为什么会发生这种情况? 在此先感谢。
编辑:试图pankar的建议有保留设置实体为true,但没有运气...
嗨莱特,谢谢你打扰我的问题,并提供足够的解释性答案。现在我得到了这个问题,并且可以提供一个解决方案(您的提议似乎都是合法的)。我可能从来没有想过,'OBJECT元素也可能出现在HEAD元素的内容中.' – CrisDeBlonde 2012-08-07 20:21:55
没问题,*标准*是棘手的bug子手。每个人都想坚持他们,但大多数人不知道(或关心)他们的内容。经过一番尝试和一个“跆拳道”的时刻,我必须自己去看看,以确保它! – Leigh 2012-08-07 20:28:01