int main() { enum mbfl_no_encoding from_encoding, to_encoding; enum mbfl_no_language no_language; mbfl_buffer_converter *convd = NULL; mbfl_string string, result, *ret; mbfl_language lang; unsigned char input[] = "日本語文字列"; /* EUC-JP kanji string */ no_language = mbfl_name2no_language("Japanese"); from_encoding = mbfl_name2no_encoding("EUC-JP"); to_encoding = mbfl_name2no_encoding("SJIS"); mbfl_string_init(&string); mbfl_string_init(&result); string.no_encoding = from_encoding; string.no_language = no_language; string.val = (unsigned char *)input; string.len = strlen(input); convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0); ret = mbfl_buffer_converter_feed_result(convd, &string, &result); mbfl_buffer_converter_delete(convd); puts(ret->val); return 1; }
PHP_MAILPARSE_API void php_mimepart_decoder_prepare(php_mimepart *part, int do_decode, php_mimepart_extract_func_t decoder, void *ptr) { enum mbfl_no_encoding from = mbfl_no_encoding_8bit; if (do_decode && part->content_transfer_encoding) { from = mbfl_name2no_encoding(part->content_transfer_encoding); if (from == mbfl_no_encoding_invalid) { if (strcasecmp("binary", part->content_transfer_encoding) != 0) { zend_error(E_WARNING, "%s(): mbstring doesn't know how to decode %s transfer encoding!", get_active_function_name(), part->content_transfer_encoding); } from = mbfl_no_encoding_8bit; } } part->extract_func = decoder; part->extract_context = ptr; part->parsedata.workbuf.len = 0; if (do_decode) { if (from == mbfl_no_encoding_8bit || from == mbfl_no_encoding_7bit) { part->extract_filter = NULL; } else { #if PHP_VERSION_ID >= 70300 part->extract_filter = mbfl_convert_filter_new( mbfl_no2encoding(from), mbfl_no2encoding(mbfl_no_encoding_8bit), filter_into_work_buffer, NULL, part ); #else part->extract_filter = mbfl_convert_filter_new( from, mbfl_no_encoding_8bit, filter_into_work_buffer, NULL, part ); #endif } } }
#define UINT32_TO_BE_ARY(ptr,val) { \ unsigned int v = val; \ ((unsigned char*)(ptr))[0] = (v>>24) & 0xff,\ ((unsigned char*)(ptr))[1] = (v>>16) & 0xff,\ ((unsigned char*)(ptr))[2] = (v>> 8) & 0xff,\ ((unsigned char*)(ptr))[3] = (v ) & 0xff;\ } MBSTRING_API char *php_unicode_convert_case(int case_mode, const char *srcstr, size_t srclen, size_t *ret_len, const char *src_encoding TSRMLS_DC) { char *unicode, *newstr; size_t unicode_len; unsigned char *unicode_ptr; size_t i; enum mbfl_no_encoding _src_encoding = mbfl_name2no_encoding(src_encoding); unicode = php_mb_convert_encoding(srcstr, srclen, "UCS-4BE", src_encoding, &unicode_len TSRMLS_CC); if (unicode == NULL) return NULL; unicode_ptr = (unsigned char *)unicode; switch(case_mode) { case PHP_UNICODE_CASE_UPPER: for (i = 0; i < unicode_len; i+=4) { UINT32_TO_BE_ARY(&unicode_ptr[i], php_unicode_toupper(BE_ARY_TO_UINT32(&unicode_ptr[i]), _src_encoding TSRMLS_CC)); } break;