Konrad was trying to understand how an input form worked, and found this validation function.
function IsReallyEmpty($subject)
{
$trimmed = trim(preg_replace("/&.*;/", "", $subject));
return strlen($trimmed) != 0;
}
Now, I can understand why one might want to have a different definition of "empty" when it comes to strings. An all whitespace string, like " "
may rightfully be considered an empty input for many applications.
So calling trim
makes a lot of sense. It's the preg_replace
that starts to worry me, because that regex is clearly trying to match an HTML entity, aka
. But it matches all HTML entities, not just ones like
which are whitespace characters, but ampersands and greater/less-than signs.
But there's another problem with the regex. The *
operator is greedy. So Hello World
would see the opening &
, the closing ;
and decide the entire string could be rejected.
But that's not the real WTF. The real WTF is the very last line. In a function called IsReallyEmpty
, it returns true
if the input string is not empty, thus stretching the definition of "really" to new levels.
"Is this string really empty?" "No, it is."
