From 1a512eed449128334edf0329b72e53c5caaaa95b Mon Sep 17 00:00:00 2001 From: Andrea Faulds Date: Thu, 13 Oct 2016 23:33:33 +0100 Subject: Move utf8_encode and utf8_decode to ext/standard --- ext/standard/basic_functions.c | 10 ++ ext/standard/php_string.h | 2 + ext/standard/string.c | 94 +++++++++++ ext/standard/tests/strings/bug43957.phpt | 8 + ext/standard/tests/strings/bug49687.phpt | 19 +++ ext/standard/tests/strings/utf8.phpt | 10 ++ ext/standard/tests/strings/utf8_decode_error.phpt | 38 +++++ .../tests/strings/utf8_decode_variation1.phpt | 170 ++++++++++++++++++++ ext/standard/tests/strings/utf8_encode_error.phpt | 38 +++++ .../tests/strings/utf8_encode_variation1.phpt | 170 ++++++++++++++++++++ ext/xml/tests/bug43957.phpt | 13 -- ext/xml/tests/bug49687.phpt | 24 --- ext/xml/tests/utf8_decode_error.phpt | 44 ------ ext/xml/tests/utf8_decode_variation1.phpt | 176 --------------------- ext/xml/tests/utf8_encode_error.phpt | 44 ------ ext/xml/tests/utf8_encode_variation1.phpt | 176 --------------------- ext/xml/tests/xml006.phpt | 12 -- ext/xml/xml.c | 50 ------ 18 files changed, 559 insertions(+), 539 deletions(-) create mode 100644 ext/standard/tests/strings/bug43957.phpt create mode 100644 ext/standard/tests/strings/bug49687.phpt create mode 100644 ext/standard/tests/strings/utf8.phpt create mode 100644 ext/standard/tests/strings/utf8_decode_error.phpt create mode 100644 ext/standard/tests/strings/utf8_decode_variation1.phpt create mode 100644 ext/standard/tests/strings/utf8_encode_error.phpt create mode 100644 ext/standard/tests/strings/utf8_encode_variation1.phpt delete mode 100644 ext/xml/tests/bug43957.phpt delete mode 100644 ext/xml/tests/bug49687.phpt delete mode 100644 ext/xml/tests/utf8_decode_error.phpt delete mode 100644 ext/xml/tests/utf8_decode_variation1.phpt delete mode 100644 ext/xml/tests/utf8_encode_error.phpt delete mode 100644 ext/xml/tests/utf8_encode_variation1.phpt delete mode 100644 ext/xml/tests/xml006.phpt diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 13e8a4e6eb..d528e51908 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -2465,6 +2465,14 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_compare, 0, 0, 3) ZEND_ARG_INFO(0, length) ZEND_ARG_INFO(0, case_sensitivity) ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_utf8_encode, 0, 0, 1) + ZEND_ARG_INFO(0, data) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_utf8_decode, 0, 0, 1) + ZEND_ARG_INFO(0, data) +ZEND_END_ARG_INFO() /* }}} */ /* {{{ syslog.c */ #ifdef HAVE_SYSLOG_H @@ -2764,6 +2772,8 @@ const zend_function_entry basic_functions[] = { /* {{{ */ PHP_FE(str_split, arginfo_str_split) PHP_FE(strpbrk, arginfo_strpbrk) PHP_FE(substr_compare, arginfo_substr_compare) + PHP_FE(utf8_encode, arginfo_utf8_encode) + PHP_FE(utf8_decode, arginfo_utf8_decode) #ifdef HAVE_STRCOLL PHP_FE(strcoll, arginfo_strcoll) diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h index 14b66e7e13..6fc7587121 100644 --- a/ext/standard/php_string.h +++ b/ext/standard/php_string.h @@ -93,6 +93,8 @@ PHP_FUNCTION(str_word_count); PHP_FUNCTION(str_split); PHP_FUNCTION(strpbrk); PHP_FUNCTION(substr_compare); +PHP_FUNCTION(utf8_encode); +PHP_FUNCTION(utf8_decode); #ifdef HAVE_STRCOLL PHP_FUNCTION(strcoll); #endif diff --git a/ext/standard/string.c b/ext/standard/string.c index fa59ddd06f..4389e10702 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -64,6 +64,8 @@ /* For str_getcsv() support */ #include "ext/standard/file.h" +/* For php_next_utf8_char() */ +#include "ext/standard/html.h" #define STR_PAD_LEFT 0 #define STR_PAD_RIGHT 1 @@ -5653,6 +5655,98 @@ PHP_FUNCTION(substr_compare) } /* }}} */ +/* {{{ */ +static zend_string *php_utf8_encode(const char *s, size_t len) +{ + size_t pos = len; + zend_string *str; + unsigned char c; + + str = zend_string_safe_alloc(len, 2, 0, 0); + ZSTR_LEN(str) = 0; + while (pos > 0) { + /* The lower 256 codepoints of Unicode are identical to Latin-1, + * so we don't need to do any mapping here. */ + c = (unsigned char)(*s); + if (c < 0x80) { + ZSTR_VAL(str)[ZSTR_LEN(str)++] = (char) c; + /* We only account for the single-byte and two-byte cases because + * we're only dealing with the first 256 Unicode codepoints. */ + } else { + ZSTR_VAL(str)[ZSTR_LEN(str)++] = (0xc0 | (c >> 6)); + ZSTR_VAL(str)[ZSTR_LEN(str)++] = (0x80 | (c & 0x3f)); + } + pos--; + s++; + } + ZSTR_VAL(str)[ZSTR_LEN(str)] = '\0'; + str = zend_string_truncate(str, ZSTR_LEN(str), 0); + return str; +} +/* }}} */ + +/* {{{ */ +static zend_string *php_utf8_decode(const char *s, size_t len) +{ + size_t pos = 0; + unsigned int c; + zend_string *str; + + str = zend_string_alloc(len, 0); + ZSTR_LEN(str) = 0; + while (pos < len) { + int status = FAILURE; + c = php_next_utf8_char((const unsigned char*)s, (size_t) len, &pos, &status); + + /* The lower 256 codepoints of Unicode are identical to Latin-1, + * so we don't need to do any mapping here beyond replacing non-Latin-1 + * characters. */ + if (status == FAILURE || c > 0xFFU) { + c = '?'; + } + + ZSTR_VAL(str)[ZSTR_LEN(str)++] = c; + } + ZSTR_VAL(str)[ZSTR_LEN(str)] = '\0'; + if (ZSTR_LEN(str) < len) { + str = zend_string_truncate(str, ZSTR_LEN(str), 0); + } + + return str; +} +/* }}} */ + + +/* {{{ proto string utf8_encode(string data) + Encodes an ISO-8859-1 string to UTF-8 */ +PHP_FUNCTION(utf8_encode) +{ + char *arg; + size_t arg_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &arg, &arg_len) == FAILURE) { + return; + } + + RETURN_STR(php_utf8_encode(arg, arg_len)); +} +/* }}} */ + +/* {{{ proto string utf8_decode(string data) + Converts a UTF-8 encoded string to ISO-8859-1 */ +PHP_FUNCTION(utf8_decode) +{ + char *arg; + size_t arg_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &arg, &arg_len) == FAILURE) { + return; + } + + RETURN_STR(php_utf8_decode(arg, arg_len)); +} +/* }}} */ + /* * Local variables: * tab-width: 4 diff --git a/ext/standard/tests/strings/bug43957.phpt b/ext/standard/tests/strings/bug43957.phpt new file mode 100644 index 0000000000..0380787b73 --- /dev/null +++ b/ext/standard/tests/strings/bug43957.phpt @@ -0,0 +1,8 @@ +--TEST-- +Bug #43957 (utf8_decode() bogus conversion on multibyte indicator near end of string) +--FILE-- + +--EXPECTF-- +abc? diff --git a/ext/standard/tests/strings/bug49687.phpt b/ext/standard/tests/strings/bug49687.phpt new file mode 100644 index 0000000000..99e8dc3ec6 --- /dev/null +++ b/ext/standard/tests/strings/bug49687.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #49687 Several utf8_decode deficiencies and vulnerabilities +--FILE-- +ISO Latin 1 encoding/decoding test +--FILE-- + %s\n", urlencode("æ"), urlencode(utf8_encode("æ"))); +printf("%s <- %s\n", urlencode(utf8_decode(urldecode("%C3%A6"))), "%C3%A6"); +?> +--EXPECT-- +%E6 -> %C3%A6 +%E6 <- %C3%A6 diff --git a/ext/standard/tests/strings/utf8_decode_error.phpt b/ext/standard/tests/strings/utf8_decode_error.phpt new file mode 100644 index 0000000000..911cc15cfc --- /dev/null +++ b/ext/standard/tests/strings/utf8_decode_error.phpt @@ -0,0 +1,38 @@ +--TEST-- +Test utf8_decode() function : error conditions +--FILE-- + +--EXPECTF-- +*** Testing utf8_decode() : error conditions *** + +-- Testing utf8_decode() function with Zero arguments -- + +Warning: utf8_decode() expects exactly 1 parameter, 0 given in %s on line %d +NULL + +-- Testing utf8_decode() function with more than expected no. of arguments -- + +Warning: utf8_decode() expects exactly 1 parameter, 2 given in %s on line %d +NULL +Done + diff --git a/ext/standard/tests/strings/utf8_decode_variation1.phpt b/ext/standard/tests/strings/utf8_decode_variation1.phpt new file mode 100644 index 0000000000..f564b87da0 --- /dev/null +++ b/ext/standard/tests/strings/utf8_decode_variation1.phpt @@ -0,0 +1,170 @@ +--TEST-- +Test utf8_decode() function : usage variations - different types for data +--FILE-- + 'red', 'item' => 'pen'), + + // null data + NULL, + null, + + // boolean data + true, + false, + TRUE, + FALSE, + + // empty data + "", + '', + + // object data + new aClass(), + + // undefined data + $undefined_var, + + // unset data + $unset_var, +); + +// loop through each element of the array for data + +foreach($values as $value) { + echo @"\nArg value $value \n"; + var_dump( utf8_decode($value) ); +}; + +echo "Done"; +?> +--EXPECTF-- +*** Testing utf8_decode() : usage variations *** + +Arg value 0 +string(1) "0" + +Arg value 1 +string(1) "1" + +Arg value 12345 +string(5) "12345" + +Arg value -2345 +string(5) "-2345" + +Arg value 10.5 +string(4) "10.5" + +Arg value -10.5 +string(5) "-10.5" + +Arg value 101234567000 +string(12) "101234567000" + +Arg value 1.07654321E-9 +string(13) "1.07654321E-9" + +Arg value 0.5 +string(3) "0.5" + +Arg value Array + +Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value Array + +Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value Array + +Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value Array + +Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value Array + +Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value +string(0) "" + +Arg value +string(0) "" + +Arg value 1 +string(1) "1" + +Arg value +string(0) "" + +Arg value 1 +string(1) "1" + +Arg value +string(0) "" + +Arg value +string(0) "" + +Arg value +string(0) "" + +Arg value Some Ascii Data +string(15) "Some Ascii Data" + +Arg value +string(0) "" + +Arg value +string(0) "" +Done + diff --git a/ext/standard/tests/strings/utf8_encode_error.phpt b/ext/standard/tests/strings/utf8_encode_error.phpt new file mode 100644 index 0000000000..e12f0978b6 --- /dev/null +++ b/ext/standard/tests/strings/utf8_encode_error.phpt @@ -0,0 +1,38 @@ +--TEST-- +Test utf8_encode() function : error conditions +--FILE-- + +--EXPECTF-- +*** Testing utf8_encode() : error conditions *** + +-- Testing utf8_encode() function with Zero arguments -- + +Warning: utf8_encode() expects exactly 1 parameter, 0 given in %s on line %d +NULL + +-- Testing utf8_encode() function with more than expected no. of arguments -- + +Warning: utf8_encode() expects exactly 1 parameter, 2 given in %s on line %d +NULL +Done + diff --git a/ext/standard/tests/strings/utf8_encode_variation1.phpt b/ext/standard/tests/strings/utf8_encode_variation1.phpt new file mode 100644 index 0000000000..fa4b79976e --- /dev/null +++ b/ext/standard/tests/strings/utf8_encode_variation1.phpt @@ -0,0 +1,170 @@ +--TEST-- +Test utf8_encode() function : usage variations - +--FILE-- + 'red', 'item' => 'pen'), + + // null data + NULL, + null, + + // boolean data + true, + false, + TRUE, + FALSE, + + // empty data + "", + '', + + // object data + new aClass(), + + // undefined data + $undefined_var, + + // unset data + $unset_var, +); + +// loop through each element of the array for data + +foreach($values as $value) { + echo @"\nArg value $value \n"; + var_dump( utf8_encode($value) ); +}; + +echo "Done"; +?> +--EXPECTF-- +*** Testing utf8_encode() : usage variations *** + +Arg value 0 +string(1) "0" + +Arg value 1 +string(1) "1" + +Arg value 12345 +string(5) "12345" + +Arg value -2345 +string(5) "-2345" + +Arg value 10.5 +string(4) "10.5" + +Arg value -10.5 +string(5) "-10.5" + +Arg value 101234567000 +string(12) "101234567000" + +Arg value 1.07654321E-9 +string(13) "1.07654321E-9" + +Arg value 0.5 +string(3) "0.5" + +Arg value Array + +Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value Array + +Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value Array + +Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value Array + +Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value Array + +Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d +NULL + +Arg value +string(0) "" + +Arg value +string(0) "" + +Arg value 1 +string(1) "1" + +Arg value +string(0) "" + +Arg value 1 +string(1) "1" + +Arg value +string(0) "" + +Arg value +string(0) "" + +Arg value +string(0) "" + +Arg value Some Ascii Data +string(15) "Some Ascii Data" + +Arg value +string(0) "" + +Arg value +string(0) "" +Done + diff --git a/ext/xml/tests/bug43957.phpt b/ext/xml/tests/bug43957.phpt deleted file mode 100644 index f11d15627b..0000000000 --- a/ext/xml/tests/bug43957.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Bug #43957 (utf8_decode() bogus conversion on multibyte indicator near end of string) ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -abc? diff --git a/ext/xml/tests/bug49687.phpt b/ext/xml/tests/bug49687.phpt deleted file mode 100644 index 3ff19cee7e..0000000000 --- a/ext/xml/tests/bug49687.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -Bug #49687 Several utf8_decode deficiencies and vulnerabilities ---SKIPIF-- - ---FILE-- - ---FILE-- - ---EXPECTF-- -*** Testing utf8_decode() : error conditions *** - --- Testing utf8_decode() function with Zero arguments -- - -Warning: utf8_decode() expects exactly 1 parameter, 0 given in %s on line %d -NULL - --- Testing utf8_decode() function with more than expected no. of arguments -- - -Warning: utf8_decode() expects exactly 1 parameter, 2 given in %s on line %d -NULL -Done - diff --git a/ext/xml/tests/utf8_decode_variation1.phpt b/ext/xml/tests/utf8_decode_variation1.phpt deleted file mode 100644 index 4b9679a895..0000000000 --- a/ext/xml/tests/utf8_decode_variation1.phpt +++ /dev/null @@ -1,176 +0,0 @@ ---TEST-- -Test utf8_decode() function : usage variations - different types for data ---SKIPIF-- - ---FILE-- - 'red', 'item' => 'pen'), - - // null data - NULL, - null, - - // boolean data - true, - false, - TRUE, - FALSE, - - // empty data - "", - '', - - // object data - new aClass(), - - // undefined data - $undefined_var, - - // unset data - $unset_var, -); - -// loop through each element of the array for data - -foreach($values as $value) { - echo @"\nArg value $value \n"; - var_dump( utf8_decode($value) ); -}; - -echo "Done"; -?> ---EXPECTF-- -*** Testing utf8_decode() : usage variations *** - -Arg value 0 -string(1) "0" - -Arg value 1 -string(1) "1" - -Arg value 12345 -string(5) "12345" - -Arg value -2345 -string(5) "-2345" - -Arg value 10.5 -string(4) "10.5" - -Arg value -10.5 -string(5) "-10.5" - -Arg value 101234567000 -string(12) "101234567000" - -Arg value 1.07654321E-9 -string(13) "1.07654321E-9" - -Arg value 0.5 -string(3) "0.5" - -Arg value Array - -Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value Array - -Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value Array - -Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value Array - -Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value Array - -Warning: utf8_decode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value -string(0) "" - -Arg value -string(0) "" - -Arg value 1 -string(1) "1" - -Arg value -string(0) "" - -Arg value 1 -string(1) "1" - -Arg value -string(0) "" - -Arg value -string(0) "" - -Arg value -string(0) "" - -Arg value Some Ascii Data -string(15) "Some Ascii Data" - -Arg value -string(0) "" - -Arg value -string(0) "" -Done - diff --git a/ext/xml/tests/utf8_encode_error.phpt b/ext/xml/tests/utf8_encode_error.phpt deleted file mode 100644 index a82f98ff3b..0000000000 --- a/ext/xml/tests/utf8_encode_error.phpt +++ /dev/null @@ -1,44 +0,0 @@ ---TEST-- -Test utf8_encode() function : error conditions ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -*** Testing utf8_encode() : error conditions *** - --- Testing utf8_encode() function with Zero arguments -- - -Warning: utf8_encode() expects exactly 1 parameter, 0 given in %s on line %d -NULL - --- Testing utf8_encode() function with more than expected no. of arguments -- - -Warning: utf8_encode() expects exactly 1 parameter, 2 given in %s on line %d -NULL -Done - diff --git a/ext/xml/tests/utf8_encode_variation1.phpt b/ext/xml/tests/utf8_encode_variation1.phpt deleted file mode 100644 index 04b956c422..0000000000 --- a/ext/xml/tests/utf8_encode_variation1.phpt +++ /dev/null @@ -1,176 +0,0 @@ ---TEST-- -Test utf8_encode() function : usage variations - ---SKIPIF-- - ---FILE-- - 'red', 'item' => 'pen'), - - // null data - NULL, - null, - - // boolean data - true, - false, - TRUE, - FALSE, - - // empty data - "", - '', - - // object data - new aClass(), - - // undefined data - $undefined_var, - - // unset data - $unset_var, -); - -// loop through each element of the array for data - -foreach($values as $value) { - echo @"\nArg value $value \n"; - var_dump( utf8_encode($value) ); -}; - -echo "Done"; -?> ---EXPECTF-- -*** Testing utf8_encode() : usage variations *** - -Arg value 0 -string(1) "0" - -Arg value 1 -string(1) "1" - -Arg value 12345 -string(5) "12345" - -Arg value -2345 -string(5) "-2345" - -Arg value 10.5 -string(4) "10.5" - -Arg value -10.5 -string(5) "-10.5" - -Arg value 101234567000 -string(12) "101234567000" - -Arg value 1.07654321E-9 -string(13) "1.07654321E-9" - -Arg value 0.5 -string(3) "0.5" - -Arg value Array - -Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value Array - -Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value Array - -Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value Array - -Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value Array - -Warning: utf8_encode() expects parameter 1 to be string, array given in %s on line %d -NULL - -Arg value -string(0) "" - -Arg value -string(0) "" - -Arg value 1 -string(1) "1" - -Arg value -string(0) "" - -Arg value 1 -string(1) "1" - -Arg value -string(0) "" - -Arg value -string(0) "" - -Arg value -string(0) "" - -Arg value Some Ascii Data -string(15) "Some Ascii Data" - -Arg value -string(0) "" - -Arg value -string(0) "" -Done - diff --git a/ext/xml/tests/xml006.phpt b/ext/xml/tests/xml006.phpt deleted file mode 100644 index c714e85913..0000000000 --- a/ext/xml/tests/xml006.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -UTF-8<->ISO Latin 1 encoding/decoding test ---SKIPIF-- - ---FILE-- - %s\n", urlencode("æ"), urlencode(utf8_encode("æ"))); -printf("%s <- %s\n", urlencode(utf8_decode(urldecode("%C3%A6"))), "%C3%A6"); -?> ---EXPECT-- -%E6 -> %C3%A6 -%E6 <- %C3%A6 diff --git a/ext/xml/xml.c b/ext/xml/xml.c index f0da47dc5b..f8d72523a0 100644 --- a/ext/xml/xml.c +++ b/ext/xml/xml.c @@ -212,14 +212,6 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_xml_parser_get_option, 0, 0, 2) ZEND_ARG_INFO(0, option) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_utf8_encode, 0, 0, 1) - ZEND_ARG_INFO(0, data) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_utf8_decode, 0, 0, 1) - ZEND_ARG_INFO(0, data) -ZEND_END_ARG_INFO() - const zend_function_entry xml_functions[] = { PHP_FE(xml_parser_create, arginfo_xml_parser_create) PHP_FE(xml_parser_create_ns, arginfo_xml_parser_create_ns) @@ -243,8 +235,6 @@ const zend_function_entry xml_functions[] = { PHP_FE(xml_parser_free, arginfo_xml_parser_free) PHP_FE(xml_parser_set_option, arginfo_xml_parser_set_option) PHP_FE(xml_parser_get_option, arginfo_xml_parser_get_option) - PHP_FE(utf8_encode, arginfo_utf8_encode) - PHP_FE(utf8_decode, arginfo_utf8_decode) PHP_FE_END }; @@ -1667,46 +1657,6 @@ PHP_FUNCTION(xml_parser_get_option) } /* }}} */ -/* {{{ proto string utf8_encode(string data) - Encodes an ISO-8859-1 string to UTF-8 */ -PHP_FUNCTION(utf8_encode) -{ - char *arg; - size_t arg_len; - zend_string *encoded; - - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &arg, &arg_len) == FAILURE) { - return; - } - - encoded = xml_utf8_encode(arg, arg_len, (XML_Char*)"ISO-8859-1"); - if (encoded == NULL) { - RETURN_FALSE; - } - RETURN_STR(encoded); -} -/* }}} */ - -/* {{{ proto string utf8_decode(string data) - Converts a UTF-8 encoded string to ISO-8859-1 */ -PHP_FUNCTION(utf8_decode) -{ - char *arg; - size_t arg_len; - zend_string *decoded; - - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &arg, &arg_len) == FAILURE) { - return; - } - - decoded = xml_utf8_decode((XML_Char*)arg, arg_len, (XML_Char*)"ISO-8859-1"); - if (decoded == NULL) { - RETURN_FALSE; - } - RETURN_STR(decoded); -} -/* }}} */ - #endif /* -- cgit v1.2.1