私はphpの整頓されたライブラリを使用して、ユーザー入力からのいくつかの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;
これは、swf ファイルを埋め込むために html を使用しようとしている場合を除いて、あらゆる種類の入力に対して機能します。
だから、私はこのコードを試します:
<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
に動作します!
なぜこれが起こっているのですか?前もって感謝します。
編集:preserve-entitiesをtrueに設定してpankarの提案を試みましたが、運がありませんでした...