diff options
Diffstat (limited to 'ext/recode')
| -rw-r--r-- | ext/recode/php_recode.h | 9 | ||||
| -rw-r--r-- | ext/recode/recode.c | 54 | ||||
| -rw-r--r-- | ext/recode/tests/001.phpt | 38 | ||||
| -rw-r--r-- | ext/recode/tests/002.phpt | 32 | ||||
| -rw-r--r-- | ext/recode/tests/html.raw | 1 |
5 files changed, 104 insertions, 30 deletions
diff --git a/ext/recode/php_recode.h b/ext/recode/php_recode.h index dd15e657af..24ee0bac78 100644 --- a/ext/recode/php_recode.h +++ b/ext/recode/php_recode.h @@ -1,6 +1,6 @@ -/* +/* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2016 The PHP Group | +----------------------------------------------------------------------+ @@ -26,6 +26,9 @@ extern zend_module_entry recode_module_entry; #define phpext_recode_ptr &recode_module_entry +#include "php_version.h" +#define PHP_RECODE_VERSION PHP_VERSION + PHP_MINIT_FUNCTION(recode); PHP_MSHUTDOWN_FUNCTION(recode); PHP_MINFO_FUNCTION(recode); @@ -35,5 +38,5 @@ PHP_FUNCTION(recode_file); #else #define phpext_recode_ptr NULL #endif - + #endif /* PHP_RECODE_H */ diff --git a/ext/recode/recode.c b/ext/recode/recode.c index 7d141e7928..8db0435105 100644 --- a/ext/recode/recode.c +++ b/ext/recode/recode.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2016 The PHP Group | +----------------------------------------------------------------------+ @@ -15,7 +15,7 @@ | Author: Kristian Koehntopp <kris@koehntopp.de> | +----------------------------------------------------------------------+ */ - + /* $Id$ */ /* {{{ includes & prototypes */ @@ -62,7 +62,7 @@ ZEND_END_MODULE_GLOBALS(recode) #else # define ReSG(v) (recode_globals.v) #endif - + ZEND_DECLARE_MODULE_GLOBALS(recode) static PHP_GINIT_FUNCTION(recode); @@ -85,18 +85,18 @@ static const zend_function_entry php_recode_functions[] = { PHP_FE(recode_file, arginfo_recode_file) PHP_FALIAS(recode, recode_string, arginfo_recode_string) PHP_FE_END -}; +}; /* }}} */ zend_module_entry recode_module_entry = { STANDARD_MODULE_HEADER, - "recode", - php_recode_functions, - PHP_MINIT(recode), - PHP_MSHUTDOWN(recode), + "recode", + php_recode_functions, + PHP_MINIT(recode), + PHP_MSHUTDOWN(recode), + NULL, NULL, - NULL, - PHP_MINFO(recode), - NO_VERSION_YET, + PHP_MINFO(recode), + PHP_RECODE_VERSION, PHP_MODULE_GLOBALS(recode), PHP_GINIT(recode), NULL, @@ -146,32 +146,32 @@ PHP_FUNCTION(recode_string) RECODE_REQUEST request = NULL; char *r = NULL; size_t r_len = 0, r_alen = 0; - int req_len, str_len; + size_t req_len, str_len; char *req, *str; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &req, &req_len, &str, &str_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &req, &req_len, &str, &str_len) == FAILURE) { return; } request = recode_new_request(ReSG(outer)); if (request == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot allocate request structure"); + php_error_docref(NULL, E_WARNING, "Cannot allocate request structure"); RETURN_FALSE; } if (!recode_scan_request(request, req)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal recode request '%s'", req); + php_error_docref(NULL, E_WARNING, "Illegal recode request '%s'", req); goto error_exit; } - + recode_buffer_to_buffer(request, str, str_len, &r, &r_len, &r_alen); if (!r) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Recoding failed."); + php_error_docref(NULL, E_WARNING, "Recoding failed."); error_exit: RETVAL_FALSE; } else { - RETVAL_STRINGL(r, r_len, 1); + RETVAL_STRINGL(r, r_len); free(r); } @@ -187,39 +187,39 @@ PHP_FUNCTION(recode_file) { RECODE_REQUEST request = NULL; char *req; - int req_len; + size_t req_len; zval *input, *output; php_stream *instream, *outstream; FILE *in_fp, *out_fp; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "srr", &req, &req_len, &input, &output) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "srr", &req, &req_len, &input, &output) == FAILURE) { return; } - php_stream_from_zval(instream, &input); - php_stream_from_zval(outstream, &output); + php_stream_from_zval(instream, input); + php_stream_from_zval(outstream, output); if (FAILURE == php_stream_cast(instream, PHP_STREAM_AS_STDIO, (void**)&in_fp, REPORT_ERRORS)) { RETURN_FALSE; } - + if (FAILURE == php_stream_cast(outstream, PHP_STREAM_AS_STDIO, (void**)&out_fp, REPORT_ERRORS)) { RETURN_FALSE; } request = recode_new_request(ReSG(outer)); if (request == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot allocate request structure"); + php_error_docref(NULL, E_WARNING, "Cannot allocate request structure"); RETURN_FALSE; } if (!recode_scan_request(request, req)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal recode request '%s'", req); + php_error_docref(NULL, E_WARNING, "Illegal recode request '%s'", req); goto error_exit; } - + if (!recode_file_to_file(request, in_fp, out_fp)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Recoding failed."); + php_error_docref(NULL, E_WARNING, "Recoding failed."); goto error_exit; } diff --git a/ext/recode/tests/001.phpt b/ext/recode/tests/001.phpt new file mode 100644 index 0000000000..c03b44a811 --- /dev/null +++ b/ext/recode/tests/001.phpt @@ -0,0 +1,38 @@ +--TEST-- +recode_string() function - Testing string conversions between latin1, UTF-8 and html +--SKIPIF-- +<?php if (!extension_loaded("recode")) print "skip"; ?> +--FILE-- +<?php +function ascii2hex($ascii) { + $hex = ''; + for ($i = 0; $i < strlen($ascii); $i++) { + $byte = dechex(ord($ascii{$i})); + $byte = str_repeat('0', 2 - strlen($byte)).$byte; + $hex .= $byte . " "; + } + return $hex; +} + +function hex2ascii($hex){ + $ascii=''; + $hex=str_replace(" ", "", $hex); + for($i=0; $i<strlen($hex); $i=$i+2) { + $ascii .= chr(hexdec(substr($hex, $i, 2))); + } + return($ascii); +} + +$lat1_hex_org = '31 32 33 e5 e4 f6 61 62 63'; +$utf8_hex = ascii2hex(recode_string('lat1..utf-8', hex2ascii($lat1_hex_org))); +$html = recode_string('utf-8..html', hex2ascii($utf8_hex)); +$lat1_hex = ascii2hex(recode_string('html..lat1', $html)); + +echo "#" . $utf8_hex . "#\n"; +echo "#" . $html . "#\n"; +echo "#" . $lat1_hex . "#\n"; +?> +--EXPECT-- +#31 32 33 c3 a5 c3 a4 c3 b6 61 62 63 # +#123åäöabc# +#31 32 33 e5 e4 f6 61 62 63 #
\ No newline at end of file diff --git a/ext/recode/tests/002.phpt b/ext/recode/tests/002.phpt new file mode 100644 index 0000000000..fb9f286422 --- /dev/null +++ b/ext/recode/tests/002.phpt @@ -0,0 +1,32 @@ +--TEST-- +recode_string() function - Testing string conversions between latin1, UTF-8 and html +--SKIPIF-- +<?php if (!extension_loaded("recode")) print "skip"; ?> +--FILE-- +<?php +function ascii2hex($ascii) { + $hex = ''; + for ($i = 0; $i < strlen($ascii); $i++) { + $byte = dechex(ord($ascii{$i})); + $byte = str_repeat('0', 2 - strlen($byte)).$byte; + $hex .= $byte . " "; + } + return $hex; +} + +$html_file = fopen(realpath(dirname(__FILE__)) . '/html.raw', 'r'); +$utf_8_filepath = realpath(dirname(__FILE__)) . '/utf8.raw'; +$utf_8_file = fopen($utf_8_filepath, 'w+'); + +recode_file('html..utf8', $html_file, $utf_8_file); + +rewind($utf_8_file); +echo '#' . ascii2hex(fread($utf_8_file, filesize($utf_8_filepath))) . "#\n"; + +fclose($html_file); +fclose($utf_8_file); + +unlink($utf_8_filepath); +?> +--EXPECT-- +#31 32 33 c3 a5 c3 a4 c3 b6 61 62 63 # diff --git a/ext/recode/tests/html.raw b/ext/recode/tests/html.raw new file mode 100644 index 0000000000..64ecf1331f --- /dev/null +++ b/ext/recode/tests/html.raw @@ -0,0 +1 @@ +123åäöabc
\ No newline at end of file |
