Reputation: 2100
Elements of an array containing special characters are converted to empty strings when encoding the array with json_encode:
$arr = array ( "funds" => "ComStage STOXX®Europe 600 Techn NR ETF", "time"=>....);
$json = json_encode($arr);
After JSON encoding the element [funds] is null. It happens only with special characters (copyright, trademark etc) like the ones in "ComStage STOXX®Europe 600 Techn NR ETF".
Any suggestions?
Thanks
UPDATE: This is what solved the problem prior to populating the array (all names are taken from the db):
$mysqli->query("SET NAMES 'utf8'");
Upvotes: 63
Views: 155230
Reputation: 1135
Use the below function.
function utf8_converter($array) {
array_walk_recursive($array, function (&$item, $key) {
if (!mb_detect_encoding($item, 'utf-8', true)) {
$item = utf8_encode($item);
}
});
return $array;
}
Upvotes: 5
Reputation: 3833
To avoid escaping of special characters, I'm passing the flag:
JSON_UNESCAPED_UNICODE
Like this:
json_encode($array, JSON_UNESCAPED_UNICODE)
Upvotes: 8
Reputation: 69
Use this code mysql_set_charset("UTF8", $connection);
Example $connection = mysql_connect(DB_HOST_GATEWAY,DB_USER_GATEWAY, DB_PASSWORD_GATEWAY); mysql_set_charset("UTF8", $connection); mysql_select_db(DB_DATABASE_GATEWAY,$connection);
Upvotes: -1
Reputation: 5660
Your input has to be encoded as UTF-8 or ISO-8859-1.
http://www.php.net/manual/en/function.json-encode.php
Because if you try to convert an array of non-utf8 characters you'll be getting 0 as return value.
Since 5.5.0 The return value on failure was changed from null string to FALSE.
Upvotes: 21
Reputation: 302
To me, it works this way:
# Creating the ARRAY from Result.
$array=array();
while($row = $result->fetch_array(MYSQL_ASSOC))
{
# Converting each column to UTF8
$row = array_map('utf8_encode', $row);
array_push($array,$row);
}
json_encode($array);
Upvotes: 13
Reputation: 1
1.mysql_set_charset('utf8');
// set this line on top of your page in which you are using json.
latin1_swedish_ci
". Upvotes: -5
Reputation: 1
you should add charset=UTF-8 in meta tag and use json_encode for special characters
$json = json_encode($arr);
json_encode function converts special characters in UTF8 standard
Upvotes: -4
Reputation: 75
you should use this code:
$json = json_encode(array_map('utf8_encode', $arr))
array_map function converts special characters in UTF8 standard
Upvotes: 5
Reputation: 24435
The manual for json_encode specifies this:
All string data must be UTF-8 encoded.
Thus, try array_map
ping utf8_encode()
to your array before you encode it:
$arr = array_map('utf8_encode', $arr);
$json = json_encode($arr);
// {"funds":"ComStage STOXX\u00c2\u00aeEurope 600 Techn NR ETF"}
For reference, take a look at the differences between the three examples on this fiddle. The first doesn't use character encoding, the second uses htmlentities
and the third uses utf8_encode
- they all return different results.
For consistency, you should use utf8_encode()
.
Docs
Upvotes: 52