Есть бд с Collation utf8_general_ci (пробовал utf8mb4_unicode_ci), из нее получаем запросы и после json_encode отправляем к JS
$success = $mysqli->query($query)
or die ('cannot select activities');
$myArray=array();
while($row = $success->fetch_assoc())
{
array_push($myArray,$row);
}
printf(json_encode($myArray));
Если сохранить в бд строчку с такими символами
!@#$%^&
то после команды json_encode получаем пустую строчку
Нашел похожие проблемы и пробовал:
json_encode($myArray, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE)
Пробовал пропускать через вот эту функцию, все значения превращаются в null
function utf8_encode_deep(&$input) {
if (is_string($input)) {
$input = utf8_encode($input);
} else if (is_array($input)) {
foreach ($input as &$value) {
utf8_encode_deep($value);
}
unset($value);
} else if (is_object($input)) {
$vars = array_keys(get_object_vars($input));
foreach ($vars as $var) {
utf8_encode_deep($input->$var);
}
}
}
И так пробовал
...
$myArray=array();
while($row = $success->fetch_assoc())
{
array_push($myArray,$row);
}
printf(json_encode(to_utf8($myArray)));
/* close connection */
$mysqli->close();
exit();
}
}
function to_utf8($in)
{
if (is_array($in)) {
foreach ($in as $key => $value) {
$out[to_utf8($key)] = to_utf8($value);
}
} elseif(is_string($in)) {
if(mb_detect_encoding($in) != "UTF-8")
return utf8_encode($in);
else
return $in;
} else {
return $in;
}
return $out;
}
Как решить подобную проблему?