aboutsummaryrefslogtreecommitdiff
path: root/mod/profile
diff options
context:
space:
mode:
Diffstat (limited to 'mod/profile')
-rw-r--r--mod/profile/actions/edit.php14
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());