pollita Sun Sep 24 20:01:29 2006 UTC
Modified files:
/php-src/ext/standard file.c
Log:
PHP6 Update for get_meta_tags() -- What a silly function...
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/file.c?r1=1.454&r2=1.455&diff_format=u
Index: php-src/ext/standard/file.c
diff -u php-src/ext/standard/file.c:1.454 php-src/ext/standard/file.c:1.455
--- php-src/ext/standard/file.c:1.454 Fri Sep 22 21:48:33 2006
+++ php-src/ext/standard/file.c Sun Sep 24 20:01:29 2006
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: file.c,v 1.454 2006/09/22 21:48:33 pollita Exp $ */
+/* $Id: file.c,v 1.455 2006/09/24 20:01:29 pollita Exp $ */
/* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
@@ -353,7 +353,7 @@
#define PHP_META_UNSAFE ".\\+*?[^]$() "
-/* {{{ proto array get_meta_tags(string filename [, bool use_include_path])
+/* {{{ proto array get_meta_tags(string filename [, bool use_include_path]) U
Extracts all meta tag content attributes from a file and returns an array */
PHP_FUNCTION(get_meta_tags)
@@ -383,7 +383,7 @@
RETURN_FALSE;
}
}
- md.stream = php_stream_open_wrapper(filename, "rb",
+ md.stream = php_stream_open_wrapper(filename, "rt",
(use_include_path ? USE_PATH : 0) | REPORT_ERRORS,
NULL);
if (filename_type == IS_UNICODE) {
@@ -393,6 +393,31 @@
RETURN_FALSE;
}
+ if (md.stream->readbuf_type == IS_UNICODE) {
+ /* Either stream auto-applied encoding (which http:// wrapper
does do)
+ * Or the streams layer unicodified it for us */
+ zval *filterparams;
+ php_stream_filter *filter;
+
+ /* Be lazy and convert contents to utf8 again
+ * This could be made more efficient by detecting if
+ * it's being upconverted from utf8 and cancelling all
conversion
+ * rather than reconverting, but this is a silly function
anyway */
+
+ MAKE_STD_ZVAL(filterparams);
+ array_init(filterparams);
+ add_ascii_assoc_long(filterparams, "error_mode",
UG(from_error_mode));
+ add_ascii_assoc_unicode(filterparams, "subst_char",
UG(from_subst_char), 1);
+ filter = php_stream_filter_create("unicode.to.utf8",
filterparams, 0 TSRMLS_CC);
+ zval_ptr_dtor(&filterparams);
+
+ if (!filter) {
+ php_stream_close(md.stream);
+ RETURN_FALSE;
+ }
+ php_stream_filter_append(&md.stream->readfilters, filter);
+ }
+
array_init(return_value);
tok_last = TOK_EOF;
@@ -473,9 +498,9 @@
/* For BC */
php_strtolower(name, strlen(name));
if (have_content) {
- add_assoc_string(return_value, name,
value, 0);
+ add_assoc_utf8_string(return_value,
name, value, 0);
} else {
- add_assoc_string(return_value, name,
"", 1);
+ add_assoc_utf8_string(return_value,
name, "", 1);
}
efree(name);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php