[PHP-DEV] base_convert should throw a ValueError on characters not valid in number base

Hello,

Functions that convert from one number base to another should only accept characters valid in that number base. E.g. only 0-9, a-f are allowed for hexadecimal, so what should hexdec(‘z’) do?

In the past, such characters were silently ignored. Since PHP 7.4 a deprecation notice would be generated, as a result of this RFC: https://wiki.php.net/rfc/base_convert_improvements. That RFC also proposed throwing an exception as of PHP 8.0, but that was never implemented. I propose to throw a ValueError for invalid characters starting in PHP 8.6. I added this to the Grouped ValueError Conversions for PHP 8.6 RFC: https://wiki.php.net/rfc/php86_valueerror_conversions#throw_error_for_invalid_characters_for_number_base

This applies to bindec, octdec, hexdec, and base_convert.

Regards,

Sjoerd Langkemper

On Mon, Jun 22, 2026, at 11:21, Sjoerd Langkemper wrote:

I propose to throw a ValueError for invalid characters … This applies to bindec, octdec, hexdec, and base_convert.

I created a new RFC for this: https://wiki.php.net/rfc/throw_error_for_invalid_characters_for_number_base

It was originally in the “Grouped ValueError Conversions for PHP 8.6” RFC, but that wasn’t voted on in time.

Regards,

Sjoerd