diff options
author | Masaki Kagaya <masakielastic@gmail.com> | 2015-02-19 13:18:39 +0900 |
---|---|---|
committer | Masaki Kagaya <masakielastic@gmail.com> | 2015-02-19 13:18:39 +0900 |
commit | c948e44807ea23faf670d3d917e24937bb690502 (patch) | |
tree | 2508517270478074ee127557fe610b95dd02cbf6 /ext/mbstring | |
parent | cb02838147831688111a8d173645f1be0dbbd0b6 (diff) | |
download | php-git-c948e44807ea23faf670d3d917e24937bb690502.tar.gz |
added mb_ord
Diffstat (limited to 'ext/mbstring')
-rw-r--r-- | ext/mbstring/mbstring.c | 73 | ||||
-rw-r--r-- | ext/mbstring/mbstring.h | 1 |
2 files changed, 74 insertions, 0 deletions
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 7c138cbcc2..49b2ed5afb 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -437,6 +437,11 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_check_encoding, 0, 0, 0) ZEND_ARG_INFO(0, encoding) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ord, 0, 0, 1) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_regex_encoding, 0, 0, 0) ZEND_ARG_INFO(0, encoding) ZEND_END_ARG_INFO() @@ -562,6 +567,7 @@ const zend_function_entry mbstring_functions[] = { PHP_FE(mb_send_mail, arginfo_mb_send_mail) PHP_FE(mb_get_info, arginfo_mb_get_info) PHP_FE(mb_check_encoding, arginfo_mb_check_encoding) + PHP_FE(mb_ord, arginfo_mb_ord) #if HAVE_MBREGEX PHP_MBREGEX_FUNCTION_ENTRIES #endif @@ -4585,6 +4591,73 @@ PHP_FUNCTION(mb_check_encoding) } /* }}} */ +static inline long php_mb_ord(const char* str, size_t str_len, const char* enc) +{ + enum mbfl_no_encoding no_enc; + zend_bool supported = false; + char* ret; + size_t ret_len; + + if (enc == NULL) { + no_enc = MBSTRG(current_internal_encoding)->no_encoding; + } else { + no_enc = mbfl_name2no_encoding(enc); + + if (no_enc == mbfl_no_encoding_invalid) { + php_error_docref(NULL, E_WARNING, "Unknown encoding \"%s\"", enc); + return -1; + } + } + + if (no_enc == mbfl_no_encoding_utf8 + || no_enc == mbfl_no_encoding_utf8_docomo + || no_enc == mbfl_no_encoding_utf8_kddi_a + || no_enc == mbfl_no_encoding_utf8_kddi_b + || no_enc == mbfl_no_encoding_utf8_sb + ) { + supported = true; + } + + if (!supported) { + php_error_docref(NULL, E_WARNING, "Unsupported encoding \"%s\"", enc); + return -1; + } + + ret = php_mb_convert_encoding(str, str_len, "UCS-4BE", enc, &ret_len); + + if (ret == NULL) { + return -1; + } + + return (unsigned char) ret[0] << 24 | + (unsigned char) ret[1] << 16 | + (unsigned char) ret[2] << 8 | + (unsigned char) ret[3]; +} + +/* {{{ proto bool mb_ord([string str[, string encoding]]) */ +PHP_FUNCTION(mb_ord) +{ + char* str; + size_t str_len; + char* enc = NULL; + size_t enc_len; + long cp; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", &str, &str_len, &enc, &enc_len) == FAILURE) { + return; + } + + cp = php_mb_ord(str, str_len, enc); + + if (0 > cp) { + RETURN_FALSE; + } + + RETURN_LONG(cp); +} +/* }}} */ + /* {{{ php_mb_populate_current_detect_order_list */ static void php_mb_populate_current_detect_order_list(void) { diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h index 9685c64d7b..8599e46881 100644 --- a/ext/mbstring/mbstring.h +++ b/ext/mbstring/mbstring.h @@ -127,6 +127,7 @@ PHP_FUNCTION(mb_decode_numericentity); PHP_FUNCTION(mb_send_mail); PHP_FUNCTION(mb_get_info); PHP_FUNCTION(mb_check_encoding); +PHP_FUNCTION(mb_ord); MBSTRING_API char *php_mb_safe_strrchr_ex(const char *s, unsigned int c, size_t nbytes, const mbfl_encoding *enc); |