我正在使用 php 的 tidy 库来“清理和修复”来自用户输入的一些 html。
一切正常,但我遇到了一个问题,我无法弄清楚它的原因是什么。我的代码是这样的:
$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 嵌入 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,但没有运气......