chainmatrix Posted May 27, 2011 Share Posted May 27, 2011 Situation is as follows: I have fetched data from database. This data has all special characters replaced with their ASCII value codes (ä is ä , ö is ö and so on). Due to the encoding, data is not in correct alphabetical order after fetching it; thus I'd need to decode all the characters back into normal UTF-8 characters and then sort the data. html_entity_decode seems to handle this. However, I am unable to figure out how to decode the data, as it is currently located in a multidimensional array? I started solving this by going through the arrays with loops; my current code is below, but my knowledge in arrays in not good enough to figure out how to replace the data within the array with the decoded values? foreach ($result_array as $row) { foreach ($row as $key => $value) { $new_value = html_entity_decode($value); // I would now need to replace the original $value in $result_array with the $new_value, but can't figure out how to do it?? } } Quote Link to comment https://forums.phpfreaks.com/topic/237592-decoding-ascii-value-encoded-characters-into-utf-8-characters-inside-an-array/ Share on other sites More sharing options...
Zane Posted May 27, 2011 Share Posted May 27, 2011 Just change the variable name to $value. It will overwrite the current value in the loop. $value = html_entity_decode($value); Quote Link to comment https://forums.phpfreaks.com/topic/237592-decoding-ascii-value-encoded-characters-into-utf-8-characters-inside-an-array/#findComment-1220923 Share on other sites More sharing options...
chainmatrix Posted May 27, 2011 Author Share Posted May 27, 2011 Just change the variable name to $value. It will overwrite the current value in the loop. Thank you for the answer. However, that does not seem to update the original values in the array; after running through the loop, they remain unchanged? Quote Link to comment https://forums.phpfreaks.com/topic/237592-decoding-ascii-value-encoded-characters-into-utf-8-characters-inside-an-array/#findComment-1220927 Share on other sites More sharing options...
Zane Posted May 27, 2011 Share Posted May 27, 2011 assign $value as a reference in your foreach and it should work foreach ($result_array as $row) { foreach ($row as $key => &$value) { $value = html_entity_decode($value); // I would now need to replace the original $value in $result_array with the $new_value, but can't figure out how to do it?? } } Notice how I put an ampersand in front of $value in the second foreach. That will assign it by reference allowing you to change it on the fly. Quote Link to comment https://forums.phpfreaks.com/topic/237592-decoding-ascii-value-encoded-characters-into-utf-8-characters-inside-an-array/#findComment-1220929 Share on other sites More sharing options...
chainmatrix Posted May 27, 2011 Author Share Posted May 27, 2011 assign $value as a reference in your foreach and it should work . . . Notice how I put an ampersand in front of $value in the second foreach. That will assign it by reference allowing you to change it on the fly. For some reason I could still not get it work, original values in the array remained unchanged. However, inspired by your first suggestion I was able to decode the offending characters already when creating the array from database search result. Looked like this: while ($row = mysql_fetch_array($result, MYSQL_NUM)) { $rows[0] = html_entity_decode($row[0], ENT_COMPAT, 'UTF-8'); // just an example, actually looped through rows $result_array[] = $row; } (The next step was to figure out how to sort the multidimensional array. Just in case someone googles this up, below is also an example of how to do it -- it may well be piece of cake to the brainiacs among us, but it took me quite a while to figure out. ) foreach ($result_array as $key => $row) { $sort_by[$key] = $row[0]; // replace [0] with the index to be used for sorting } array_multisort($sort_by, SORT_ASC, $result_array); } Thank you for your help Zanus, much appreciated! Quote Link to comment https://forums.phpfreaks.com/topic/237592-decoding-ascii-value-encoded-characters-into-utf-8-characters-inside-an-array/#findComment-1220935 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.