There are several possible kinds of whitespace and even more possibilities for "empty" (e.g., is <p><em></em></p>
empty? Or not?).
Also consider the possibility of having <p class="para">
or <p id="chief">
.
Much depends on where the text comes from. Microsoft Word will output  
's in some circumstances (I could and did unremember them -- sorry).
A reasonable possibility for now might be to use a regex such as #<p>(\\s| )*</p>#mis'
to match multiple empty lines.
But keep in mind that this kind of requisite tends to rapidly become unreasonable - for example the class part might force you to use #<p[^>]*>(\\s| )*</p>#mis'
and so on - so, you might want to start looking into a XML parser instead.
(?>\s|(?R))*
~u', '', html_entity_decode($html));` - this should work if you have correct HTML entities. If not, you will need to replace them "manually" (with a list, perhaps). – Wiktor Stribiżew Jan 27 '16 at 08:20