diff options
Diffstat (limited to 'mod/profile')
-rw-r--r-- | mod/profile/actions/edit.php | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/mod/profile/actions/edit.php b/mod/profile/actions/edit.php index 207559334..baeb49108 100644 --- a/mod/profile/actions/edit.php +++ b/mod/profile/actions/edit.php @@ -29,15 +29,21 @@ if (!is_array($accesslevel)) { $accesslevel = array(); } +/** + * wrapper for recursive array walk decoding + */ +function profile_array_decoder(&$v) { + $v = html_entity_decode($v, ENT_COMPAT, 'UTF-8'); +} + + foreach($CONFIG->profile as $shortname => $valuetype) { // the decoding is a stop gag to prevent && showing up in profile fields // because it is escaped on both input (get_input()) and output (view:output/text). see #561 and #1405. // must decode in utf8 or string corruption occurs. see #1567. $value = get_input($shortname); if (is_array($value)) { - foreach ($value as $k => $v) { - $value[$k] = html_entity_decode($v, ENT_COMPAT, 'UTF-8'); - } + array_walk_recursive($value, 'profile_array_decoder'); } else { $value = html_entity_decode($value, ENT_COMPAT, 'UTF-8'); } @@ -104,4 +110,4 @@ if (sizeof($input) > 0) { system_message(elgg_echo("profile:saved")); } -forward($profile_owner->getUrl());
\ No newline at end of file +forward($profile_owner->getUrl()); |