There are 2 ways I can think of that you can tackle this issue:
- Update Tidy to parse
<iframe>
tag as block tag. For this I suggest you check Nikoli's blog. - create HTML parser (some sort of C# code which can parse your HTML code and replace self closing tags with correct opening and closing tags) on publish time. Honestly, this is not the best approach, since parsing HTML is reaaaaaly tricky and hard at best, but you can identify all self-closing tags and override them. You can use regex like this to identify all self closed-closed tags:
String regexString = "<(?:"[^"]"['"]|'[^']'['"]|[^'">])+(\/\s*)>";
Please keep in mind that with this approach, your content will still have self close iframe-closed iframe
tag, but its representation after publishing will be OK. Also, I would still go with option 1 if possible.