Skip to content

mb_check_encoding wrong result for 7bit #8128

Closed
@divinity76

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

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions