Skip to content

mb_check_encoding wrong result for 7bit #8128

Description

@divinity76

Description

edit: warning, there's conflicting definitions of 7bit.. according to https://galprop.stanford.edu/bugs/docs/en/html/api/Bugzilla/Util.html it should be

Returns true is the string contains only 7-bit characters (ASCII 32 through 126, ASCII 10 (LineFeed) and ASCII 13 (Carrage Return).

which i guess would be ($o >= 32 && $o <=126) || $o === 10 || $o === 13
, but if that definition is correct, mb_check_encoding's current behavior is still wrong here.. moving on

The following code:

<?php
function is_7bit_clean(string $str):bool{
    for($i=0,$imax=strlen($str);$i<$imax;++$i){
        if(ord($str[$i]) & (1 << 7)){
            return false;
        }
    }
    return true;
}
$str = chr(255);
var_dump(is_7bit_clean($str) === mb_check_encoding($str, '7bit'));

Resulted in this output:

bool(false)

But I expected this output instead:

bool(true)

as of 8.1.2. probably related to GH #7712
3v4l: https://3v4l.org/HZh8A

PHP Version

PHP 8.1.2

Operating System

No response

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions