}
-MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const char *enc)
+MBSTRING_API int php_mb_check_encoding(
+ const char *input, size_t length, const mbfl_encoding *encoding)
{
- const mbfl_encoding *encoding = MBSTRG(current_internal_encoding);
mbfl_buffer_converter *convd;
- if (enc != NULL) {
- encoding = mbfl_name2encoding(enc);
- if (!encoding || encoding == &mbfl_encoding_pass) {
- php_error_docref(NULL, E_WARNING, "Invalid encoding \"%s\"", enc);
- return 0;
- }
- }
-
convd = php_mb_init_convd(encoding);
if (convd == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to create converter");
}
-MBSTRING_API int php_mb_check_encoding_recursive(HashTable *vars, const zend_string *enc)
+static int php_mb_check_encoding_recursive(HashTable *vars, const mbfl_encoding *encoding)
{
- const mbfl_encoding *encoding = MBSTRG(current_internal_encoding);
mbfl_buffer_converter *convd;
zend_long idx;
zend_string *key;
(void)(idx);
- if (enc != NULL) {
- encoding = mbfl_name2encoding(ZSTR_VAL(enc));
- if (!encoding || encoding == &mbfl_encoding_pass) {
- php_error_docref(NULL, E_WARNING, "Invalid encoding \"%s\"", ZSTR_VAL(enc));
- return 0;
- }
- }
-
convd = php_mb_init_convd(encoding);
if (convd == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to create converter");
}
break;
case IS_ARRAY:
- if (!php_mb_check_encoding_recursive(Z_ARRVAL_P(entry), enc)) {
+ if (!php_mb_check_encoding_recursive(Z_ARRVAL_P(entry), encoding)) {
valid = 0;
break;
}
{
zend_string *input_str = NULL, *enc = NULL;
HashTable *input_ht = NULL;
+ const mbfl_encoding *encoding = MBSTRG(current_internal_encoding);
ZEND_PARSE_PARAMETERS_START(0, 2)
Z_PARAM_OPTIONAL
Z_PARAM_STR(enc)
ZEND_PARSE_PARAMETERS_END();
+ if (enc != NULL) {
+ encoding = mbfl_name2encoding(ZSTR_VAL(enc));
+ if (!encoding || encoding == &mbfl_encoding_pass) {
+ php_error_docref(NULL, E_WARNING, "Invalid encoding \"%s\"", ZSTR_VAL(enc));
+ RETURN_FALSE;
+ }
+ }
+
if (input_ht) {
- if (!php_mb_check_encoding_recursive(input_ht, enc)) {
+ if (!php_mb_check_encoding_recursive(input_ht, encoding)) {
RETURN_FALSE;
}
RETURN_TRUE;
} else if (input_str) {
- if (!php_mb_check_encoding(ZSTR_VAL(input_str), ZSTR_LEN(input_str), enc ? ZSTR_VAL(enc): NULL)) {
+ if (!php_mb_check_encoding(ZSTR_VAL(input_str), ZSTR_LEN(input_str), encoding)) {
RETURN_FALSE;
}
RETURN_TRUE;
MBSTRING_API size_t php_mb_mbchar_bytes(const char *s);
MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, const mbfl_encoding *encoding);
-MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const char *enc);
+MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const mbfl_encoding *encoding);
ZEND_BEGIN_MODULE_GLOBALS(mbstring)
char *internal_encoding_name;
}
/* }}} */
+/* {{{ php_mb_regex_get_mbctype_encoding */
+const mbfl_encoding *php_mb_regex_get_mbctype_encoding(void)
+{
+ return mbfl_name2encoding(_php_mb_regex_mbctype2name(MBREX(current_mbctype)));
+}
+/* }}} */
+
/* {{{ php_mb_regex_get_default_mbctype */
const char *php_mb_regex_get_default_mbctype(void)
{
OnigUChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN];
OnigEncoding enc = MBREX(current_mbctype);
- if (!php_mb_check_encoding(pattern, patlen, _php_mb_regex_mbctype2name(enc))) {
+ if (!php_mb_check_encoding(pattern, patlen, php_mb_regex_get_mbctype_encoding())) {
php_error_docref(NULL, E_WARNING,
"Pattern is not valid under %s encoding", _php_mb_regex_mbctype2name(enc));
return NULL;
if (!php_mb_check_encoding(
string,
string_len,
- php_mb_regex_get_mbctype()
+ php_mb_regex_get_mbctype_encoding()
)) {
RETURN_FALSE;
}
if (!php_mb_check_encoding(
string,
string_len,
- php_mb_regex_get_mbctype()
+ php_mb_regex_get_mbctype_encoding()
)) {
RETURN_NULL();
}
count--;
}
- if (!php_mb_check_encoding(string, string_len, php_mb_regex_get_mbctype())) {
+ if (!php_mb_check_encoding(string, string_len, php_mb_regex_get_mbctype_encoding())) {
RETURN_FALSE;
}
}
}
- if (!php_mb_check_encoding(string, string_len, php_mb_regex_get_mbctype())) {
+ if (!php_mb_check_encoding(string, string_len, php_mb_regex_get_mbctype_encoding())) {
RETURN_FALSE;
}
if (php_mb_check_encoding(
ZSTR_VAL(arg_str),
ZSTR_LEN(arg_str),
- php_mb_regex_get_mbctype()
+ php_mb_regex_get_mbctype_encoding()
)) {
MBREX(search_pos) = 0;
RETVAL_TRUE;