Хорошо, я исправил проблему.То, как я это сделал, возможно, не самое лучшее, но оно работает.Таким образом, хранение юникодов в базе данных было таким простым:
Я изменил header
в файле, куда я вставляю данные:
header('Content-Type: application/json; charset=utf-8');
Я снова кодирую сообщение в json, вставляя его так:
$stmt->bindValue(':message', json_encode($data['message']));
Перед тем, как датьВ ответ на мое приложение снова установите заголовок:
header('Content-Type: application/json; charset=utf-8');
Мой код теперь выглядит так:
<?php
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
include_once 'config.php';
$data = file_get_contents("php://input");
$data = json_decode($data, true);
try {
$stmt = $dbh->prepare("INSERT INTO `messages` (`message_id`, `from_account_id`, `for_account_id`, `date_read`, `message`)
VALUES (NULL, :from_account_id, :for_account_id, NULL, :message)");
$stmt->bindValue(':from_account_id', $data['from_account_id']);
$stmt->bindValue(':for_account_id', $data['for_account_id']);
$stmt->bindValue(':message', json_encode($data['message']));
$stmt->execute();
} catch (PDOException $e) {
header('Content-Type: text/html; charset=utf-8');
throw $e;
}
header('Content-Type: text/html; charset=utf-8');
echo 'Success';
?>
Итак, эта проблемабыл исправлен, и Unicodes были сохранены в моей БД.
Затем я снова оказался в неловкой ситуации, поскольку при получении данных из mysql
и кодировании их в json
при отправке в мое приложение мое приложение не могло возвращать юникоды специальным символам, даже если ясвязывал его с ng-bind-html
и использовал $sce.trustAsHtml()
.Обычно я просто отправлял свой результат запроса как encoded json
, но он не работал, как я сказал.Так что я сделал что-то вроде этого:
<?php
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
include_once 'config.php';
$data = file_get_contents("php://input");
$data = json_decode($data, true);
try {
$stmt = $dbh->prepare("SELECT * from messages WHERE (from_account_id = :unique_id AND for_account_id = :user_2) OR (from_account_id = :user_2 AND for_account_id = :unique_id)");
$stmt->bindValue(':unique_id', $data['user_1']);
$stmt->bindValue(':user_2', $data['user_2']);
$stmt->execute();
} catch (PDOException $e) {
throw $e;
}
$rows = $stmt->rowCount();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($rows > 0){
$i = 0;
echo "[";
foreach ($result as $key => $value){
$i++;
echo "{";
echo '"message_id"' . ":" . '"' .$value['message_id']. '"' .", ";
echo '"from_account_id"' . ":" . '"' .$value['from_account_id']. '"' .", ";
echo '"for_account_id"' . ":". '"' .$value['for_account_id']. '"' .", ";
echo '"date_sent"' . ":" . '"' .$value['date_sent']. '"' .", ";
echo '"date_read"' . ":" . '"' .$value['date_read']. '"' .", ";
echo '"message"' . ":" . '"' .str_replace("\n", "</br>", json_decode($value['message'])). '"' ;
echo "}";
if($i != $rows){
echo ",";
}
if($i == $rows){
echo "]";
}
echo "\n";
}
exit;
}
else {
echo 'Something went wrong';
exit;
}
?>
Отправка декодированной json
в строке, которую мой angularjs получает, поскольку реальный json, созданный мной, был решением.
Я добавилОтвет на этот вопрос, как, возможно, кто-то окажется в той же беде, и это будет полезно.