@@ -4672,60 +4672,76 @@ PHP_FUNCTION(mb_get_info)
4672
4672
}
4673
4673
/* }}} */
4674
4674
4675
- /* {{{ proto bool mb_check_encoding([string var[, string encoding]])
4676
- Check if the string is valid for the specified encoding */
4677
- PHP_FUNCTION (mb_check_encoding )
4675
+ MBSTRING_API int php_mb_check_encoding (const char * input , size_t length , const char * enc )
4678
4676
{
4679
- char * var = NULL ;
4680
- size_t var_len ;
4681
- char * enc = NULL ;
4682
- size_t enc_len ;
4683
- mbfl_buffer_converter * convd ;
4684
4677
const mbfl_encoding * encoding = MBSTRG (current_internal_encoding );
4678
+ mbfl_buffer_converter * convd ;
4685
4679
mbfl_string string , result , * ret = NULL ;
4686
4680
long illegalchars = 0 ;
4687
4681
4688
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "|ss" , & var , & var_len , & enc , & enc_len ) == FAILURE ) {
4689
- return ;
4690
- }
4691
-
4692
- if (var == NULL ) {
4693
- RETURN_BOOL (MBSTRG (illegalchars ) == 0 );
4682
+ if (input == NULL ) {
4683
+ return MBSTRG (illegalchars ) == 0 ;
4694
4684
}
4695
4685
4696
4686
if (enc != NULL ) {
4697
4687
encoding = mbfl_name2encoding (enc );
4698
4688
if (!encoding || encoding == & mbfl_encoding_pass ) {
4699
4689
php_error_docref (NULL , E_WARNING , "Invalid encoding \"%s\"" , enc );
4700
- RETURN_FALSE ;
4690
+ return 0 ;
4701
4691
}
4702
4692
}
4703
4693
4704
4694
convd = mbfl_buffer_converter_new2 (encoding , encoding , 0 );
4695
+
4705
4696
if (convd == NULL ) {
4706
4697
php_error_docref (NULL , E_WARNING , "Unable to create converter" );
4707
- RETURN_FALSE ;
4698
+ return 0 ;
4708
4699
}
4700
+
4709
4701
mbfl_buffer_converter_illegal_mode (convd , MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE );
4710
4702
mbfl_buffer_converter_illegal_substchar (convd , 0 );
4711
4703
4712
4704
/* initialize string */
4713
4705
mbfl_string_init_set (& string , mbfl_no_language_neutral , encoding -> no_encoding );
4714
4706
mbfl_string_init (& result );
4715
4707
4716
- string .val = (unsigned char * )var ;
4717
- string .len = var_len ;
4708
+ string .val = (unsigned char * ) input ;
4709
+ string .len = length ;
4710
+
4718
4711
ret = mbfl_buffer_converter_feed_result (convd , & string , & result );
4719
4712
illegalchars = mbfl_buffer_illegalchars (convd );
4720
4713
mbfl_buffer_converter_delete (convd );
4721
4714
4722
- RETVAL_FALSE ;
4723
4715
if (ret != NULL ) {
4724
4716
if (illegalchars == 0 && string .len == result .len && memcmp (string .val , result .val , string .len ) == 0 ) {
4725
- RETVAL_TRUE ;
4717
+ mbfl_string_clear (& result );
4718
+ return 1 ;
4726
4719
}
4720
+
4727
4721
mbfl_string_clear (& result );
4728
4722
}
4723
+
4724
+ return 0 ;
4725
+ }
4726
+
4727
+ /* {{{ proto bool mb_check_encoding([string var[, string encoding]])
4728
+ Check if the string is valid for the specified encoding */
4729
+ PHP_FUNCTION (mb_check_encoding )
4730
+ {
4731
+ char * var = NULL ;
4732
+ size_t var_len ;
4733
+ char * enc = NULL ;
4734
+ size_t enc_len ;
4735
+
4736
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "|ss" , & var , & var_len , & enc , & enc_len ) == FAILURE ) {
4737
+ return ;
4738
+ }
4739
+
4740
+ RETVAL_FALSE ;
4741
+
4742
+ if (php_mb_check_encoding (var , var_len , enc )) {
4743
+ RETVAL_TRUE ;
4744
+ }
4729
4745
}
4730
4746
/* }}} */
4731
4747
0 commit comments