victorzadorozhnyy
@victorzadorozhnyy

Как решить проблему с хранением специальных знаков в MySQL и json_encode для JS?

Есть бд с 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;
}

Как решить подобную проблему?
  • Вопрос задан
  • 322 просмотра
Решения вопроса 1
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
base64_encode, base64_decode
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы