On Sat, Apr 5, 2025 at 11:04 PM Rob Landers <rob@bottled.codes> wrote:

> On Sat, Apr 5, 2025, at 14:15, Kayck Matias wrote:
>
> *INTRODUCTION*
> This RFC proposes the addition of a new global function blank() to PHP’s
> core, intended to provide a more intuitive and context-sensitive way of
> checking for "blank" values. This function is *not a replacement* for
> empty(), but a *complementary tool *to help developers more accurately
> evaluate user input, query parameters, and form values — particularly in
> situations where empty() may behave in unintuitive ways.
>
>
>
> *MOTIVATION*The motivation for this RFC arose from a real-world issue I
> encountered at work involving query string filtering — specifically when
> using the string "0" as a filter value. Because empty("0") evaluates to
> true, the logic skipped this valid input, causing incorrect behavior in
> the application. This highlighted a gap in PHP’s current toolset for
> handling “blank” values in a more semantic and intention-aligned way.
>
>
> I would personally advocate that empty() NEVER be used on strings. There
> are too many edge cases. As I said in an earlier message on the thread, if
> you want to know if a string is empty, just do $string == "" -- note the
> double equals, not triple equals. This matches null, an actual empty
> string, and false, but won't match anything else.
>
> *PROPOSAL*
> The proposed blank() function will behave similarly to empty(), but with
> semantics better suited for filtering, validation, and user input. Its
> primary goals are:
>
>    -
>
>    To treat whitespace-only strings as blank (e.g., " ").
>    -
>
>    To treat "0" (string zero) and 0 (int zero) as *not blank*, unlike
>    empty().
>    -
>
>    To support clearer, intention-driven logic when working with dynamic
>    input, especially in query strings and HTTP forms.
>
> Function Signature
>
> function blank(mixed $value): bool;
>
> Logic (PHP version)
>
> function blank(mixed $value): bool
> {
>     if (
>         false === $value ||
>         (empty($value) && '0' != $value) ||
>         (\is_string($value) && '' === \trim($value))
>     ) {
>         return true;
>     }
>
>     return false;
> }
>
> Examples
> echo blank(null); // true
> echo blank(false); // true
> echo blank(""); // true
> echo blank(" "); // true
> echo blank([]); // true
>
> echo blank(0); // false
> echo blank("0"); // false
> echo blank("test"); // false
> echo blank([0]); // false
>
>
> I agree with most of these. I do not agree that " " (a space) is blank
> though. For people without last names, this is often their last name to
> pass validation on forms. As I said earlier, a simple loose check with an
> empty string is usually all you need, not empty().
>
> Best Regards,
> Kayck Matias ☕
>
>
> — Rob
>

Just something that came into my mind. A "normal space" character is 32,
"non-breaking space" is 160 and a "zero width space" is 8203. These are all
characters so they are not blank and cannot be ignored
-- 
Iliya Miroslavov Iliev
i.mirosla...@gmail.com

Reply via email to