Skip to content

Commit ca33ab5

Browse files
committed
mb_detect_encoding with only one candidate encoding uses mb_check_encoding
...Because it's about 5% faster.
1 parent 6acd4f7 commit ca33ab5

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

ext/mbstring/mbstring.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2713,10 +2713,15 @@ PHP_FUNCTION(mb_detect_encoding)
27132713
strict = MBSTRG(strict_detection);
27142714
}
27152715

2716-
mbfl_string_init(&string);
2717-
string.val = (unsigned char *)str;
2718-
string.len = str_len;
2719-
ret = mbfl_identify_encoding(&string, elist, size, strict);
2716+
if (strict && size == 1) {
2717+
/* If there is only a single candidate encoding, mb_check_encoding is faster */
2718+
ret = (php_mb_check_encoding(str, str_len, *elist)) ? *elist : NULL;
2719+
} else {
2720+
mbfl_string_init(&string);
2721+
string.val = (unsigned char *)str;
2722+
string.len = str_len;
2723+
ret = mbfl_identify_encoding(&string, elist, size, strict);
2724+
}
27202725

27212726
if (free_elist) {
27222727
efree(ZEND_VOIDP(elist));

0 commit comments

Comments
 (0)