Beispiel #1
0
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
		}
	}

}
Beispiel #3
0
#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;