"\0",
'\0',
'\060',
- "\070"
+ "\070",
+ "\0hello\0this is an test, to work with ' and \0 and \n and foreign chars too: blåbærøl"
);
$counter = 1;
/* Loop to check for above strings with var_export() */
Iteration 12
-'\000'
-'\000'
-string(6) "'\000'"
+'' . "\0" . ''
+'' . "\0" . ''
+string(14) "'' . "\0" . ''"
Iteration 13
'8'
string(3) "'8'"
+
+Iteration 16
+'' . "\0" . 'hello' . "\0" . 'this is an test, to work with \' and ' . "\0" . ' and
+ and foreign chars too: blåbærøl'
+'' . "\0" . 'hello' . "\0" . 'this is an test, to work with \' and ' . "\0" . ' and
+ and foreign chars too: blåbærøl'
+string(121) "'' . "\0" . 'hello' . "\0" . 'this is an test, to work with \' and ' . "\0" . ' and
+ and foreign chars too: blåbærøl'"
+
*** Testing var_export() with valid arrays ***
*** Output for arrays ***
Iteration 12
-'\000'
-'\000'
-string(6) "'\000'"
+'' . "\0" . ''
+'' . "\0" . ''
+string(14) "'' . "\0" . ''"
Iteration 13
'8'
string(3) "'8'"
+
+Iteration 16
+'' . "\0" . 'hello' . "\0" . 'this is an test, to work with \' and ' . "\0" . ' and
+ and foreign chars too: bl' . "\u00E5" . 'b' . "\u00E6" . 'r' . "\u00F8" . 'l'
+'' . "\0" . 'hello' . "\0" . 'this is an test, to work with \' and ' . "\0" . ' and
+ and foreign chars too: bl' . "\u00E5" . 'b' . "\u00E6" . 'r' . "\u00F8" . 'l'
+string(163) "'' . "\0" . 'hello' . "\0" . 'this is an test, to work with \' and ' . "\0" . ' and
+ and foreign chars too: bl' . "\u00E5" . 'b' . "\u00E6" . 'r' . "\u00F8" . 'l'"
+
*** Testing var_export() with valid arrays ***
*** Output for arrays ***
int i = 0;
char buf[10];
int buf_len;
+ int state = 0; /* 0 = in single quotes, 1 = in double quotes */
/*
* We export all codepoints > 128 in escaped form to avoid encoding issues
U16_NEXT(ustr, i, ustr_len, cp);
switch (cp) {
case 0x0: /* '\0' */
- PHPWRITE("\\000", 4);
+ if (state == 0) {
+ PHPWRITE("' . \"", 5);
+ state = 1;
+ }
+ PHPWRITE("\\0", 2);
break;
case 0x27: /* '\'' */
+ if (state == 1) {
+ PHPWRITE("\" . '", 5);
+ state = 0;
+ }
PHPWRITE("\\'", 2);
break;
default:
if ((uint32_t)cp < 128) {
+ if (state == 1) {
+ PHPWRITE("\" . '", 5);
+ state = 0;
+ }
buf[0] = (char) (short) cp;
buf_len = 1;
} else if (U_IS_BMP(cp)) {
+ if (state == 0) {
+ PHPWRITE("' . \"", 5);
+ state = 1;
+ }
buf_len = snprintf(buf, sizeof(buf), "\\u%04X", cp);
} else {
+ if (state == 0) {
+ PHPWRITE("' . \"", 5);
+ state = 1;
+ }
buf_len = snprintf(buf, sizeof(buf), "\\u%06X", cp);
}
PHPWRITE(buf, buf_len);
break;
}
}
+ if (state == 1) { // if we are in double quotes, go back to single */
+ PHPWRITE("\" . '", 5);
+ }
}
/* }}} */
PHPAPI void php_var_export(zval **struc, int level TSRMLS_DC) /* {{{ */
{
HashTable *myht;
- char* tmp_str;
- int tmp_len;
+ char *tmp_str, *tmp_str2;
+ int tmp_len, tmp_len2;
zstr class_name;
zend_uint class_name_len;
php_printf("%.*H", (int) EG(precision), Z_DVAL_PP(struc));
break;
case IS_STRING:
- tmp_str = php_addcslashes(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc), &tmp_len, 0, "'\\\0", 3 TSRMLS_CC);
+ tmp_str = php_addcslashes(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc), &tmp_len, 0, "'\\", 2 TSRMLS_CC);
+ tmp_str2 = php_str_to_str_ex(tmp_str, tmp_len, "\0", 1, "' . \"\\0\" . '", 12, &tmp_len2, 0, NULL);
PUTS ("'");
- PHPWRITE(tmp_str, tmp_len);
+ PHPWRITE(tmp_str2, tmp_len2);
PUTS ("'");
- efree (tmp_str);
+ efree(tmp_str2);
+ efree(tmp_str);
break;
case IS_UNICODE:
PUTS ("'");