|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2020-07-01 00:21 UTC] raincomplain at outlook dot com
Description: ------------ Empty string in PHP doesn't equal U+0000 which is why mb_ord will not return 0 when passing empty string. On the other hand, ord will not complain about passing empty string. I know ord is not aware of any string encoding but this behavior however leads to a wrong assumption that empty string === U+0000 which in turn leads to bugs like https://bugs.php.net/bug.php?id=69162 So one might think if var_dump(ord('') === 0); // true And var_dump(ord("\u{0000}") === 0); // true Then the following must be true var_dump("\u{0000}" === ''); // false Test script: --------------- var_dump(ord('')); Expected result: ---------------- Fatal error: Uncaught ValueError: ord(): Argument #1 ($str) must not be empty Actual result: -------------- int(0) PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 14:00:01 2025 UTC |
ord will return non-Boolean value which evaluates to FALSE ord("\u{0000}") // 0 This makes returning false sub-optimal, anyhow mb_ord already throws ValueError so I think it would be proper for ord to throw an exception just like mb_ord.I agree that the behavior of both functions should ideally match, but mb_ord('') threw a warning already before PHP 8, while ord('') did not. So maybe it would be best for BC to let ord('') raise a warning and return FALSE in PHP 8.