diff options
| author | Seiji Masugata <masugata@php.net> | 2006-05-30 15:38:22 +0000 |
|---|---|---|
| committer | Seiji Masugata <masugata@php.net> | 2006-05-30 15:38:22 +0000 |
| commit | 91dd8376bd6890837ea3836b4b6066d06903fcd7 (patch) | |
| tree | b9fcea8bfd931866c9980aac4ba1a2de93ed4932 /ext/mbstring | |
| parent | 91d4ef33efacfca82403dcb28361db9275c9af95 (diff) | |
| download | php-git-91dd8376bd6890837ea3836b4b6066d06903fcd7.tar.gz | |
added option parameter mb_list_encodings( ).
Diffstat (limited to 'ext/mbstring')
| -rw-r--r-- | ext/mbstring/mbstring.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index f0f03d5ba1..c26d9510fb 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -2325,19 +2325,41 @@ PHP_FUNCTION(mb_detect_encoding) } /* }}} */ -/* {{{ proto array mb_list_encodings() - Returns an array of all supported encodings */ +/* {{{ proto mixed mb_list_encodings([string alias_encoding]) + Returns an array of all supported entity encodings or Returns the entity encoding as a string */ PHP_FUNCTION(mb_list_encodings) { const mbfl_encoding **encodings; const mbfl_encoding *encoding; + enum mbfl_no_encoding no_encoding; int i; + char *name = NULL; + int name_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) { + RETURN_FALSE; + } - array_init(return_value); - i = 0; - encodings = mbfl_get_supported_encodings(); - while ((encoding = encodings[i++]) != NULL) { - add_next_index_string(return_value, (char *) encoding->name, 1); + if (name == NULL) { + array_init(return_value); + i = 0; + encodings = mbfl_get_supported_encodings(); + while ((encoding = encodings[i++]) != NULL) { + add_next_index_string(return_value, (char *) encoding->name, 1); + } + } else { + no_encoding = mbfl_name2no_encoding(name); + if (no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name); + RETURN_FALSE; + } + + name = (char *)mbfl_no_encoding2name(no_encoding); + if (name != NULL) { + RETURN_STRING(name, 1); + } else { + RETURN_FALSE; + } } } /* }}} */ |
