On Sun, Apr 6, 2025 at 9:52 AM Hans Henrik Bergan <divinit...@gmail.com> wrote:
> Maybe a > #[\SuppressUndefinedWarning] > > Parameter attribute could work, then everyone could implement their own > blank() function with their own preferred logic > > Not sure if it's technically feasible tho, now the php engine would need > to inspect the parameter attributes before deciding on generating a warning > or not, idk how hard that would be. > > On Sat, Apr 5, 2025, 22:27 Iliya Miroslavov Iliev <i.mirosla...@gmail.com> > wrote: > >> >> >> 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 >> > > then everyone could implement their own blank() function with their own preferred logic If this can still be implemented in userland you don't need logic integrated at low level -- Iliya Miroslavov Iliev i.mirosla...@gmail.com