preg_replace_callback('%<span>((?:[^<]|<(?!/?span>)|(?R))+)</span>%', 'CleanSpanRecursive', $content)
DEBUT :
<p><span style="font-family: Trebuchet MS,sans-serif;">
<span style="font-size: x-small;">
<span style="color: #000000;">
<span style="font-family: Times New Roman,serif;">
<span style="font-size: small;">
<span style="font-weight: normal;">
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
</span>
</span>
</span>
</span>
</span>
</span></p>
<p><span style="font-weight: normal;">
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
</span>
<span style="font-weight: x-small;">
Blah
<span style="color: #000000;">
blah
</span>
blah
</span></p>
CleanHtml =>
<p><span>
<span>
<span style="color: #000000;">
<span>
<span>
<span>
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
</span>
</span>
</span>
</span>
</span>
</span></p>
<p><span>
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
</span>
<span>
Blah
<span style="color: #000000;">
blah
</span>
blah
</span></p>
CleanSpanRecursive(0) => is_array = 0
<p><span>
<span>
<span style="color: #000000;">
<span>
<span>
<span>
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
</span>
</span>
</span>
</span>
</span>
</span></p>
<p><span>
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
</span>
<span>
Blah
<span style="color: #000000;">
blah
</span>
blah
</span></p>
CleanSpanRecursive(1) => is_array = 1
<span>
<span style="color: #000000;">
<span>
<span>
<span>
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
</span>
</span>
</span>
CleanSpanRecursive(2) => is_array = 1
<span style="color: #000000;">
<span>
<span>
<span>
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
</span>
</span>
CleanSpanRecursive(3) => is_array = 1
<span>
<span>
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
</span>
CleanSpanRecursive(4) => is_array = 1
<span>
Blah
<span style="text-decoration: underline;">
blah
</span>
blah
CleanSpanRecursive(5) => is_array = 1
Blah
<span style="text-decoration: underline;">
blah
CleanSpanRecursive(6) => is_array = 1
Blah
<span style="text-decoration: underline;">
blah
CleanSpanRecursive(7) => is_array = 1
Blah
<span style="color: #000000;">
blah
FIN :
<p>
<span style="color: #000000;">
Blah
<span style="text-decoration: underline;">
blah
blah
</span>
</span></p>
<p>
Blah
<span style="text-decoration: underline;">
blah
blah
</span>
Blah
<span style="color: #000000;">
blah
blah
</span></p>