Специальные символы с Swift (фиксированная проверка внизу главного поста)

Привет всем у меня есть проект swift о регистрации пользователей, но у меня есть проблемы со специальными символами,такими как «ö,ü,», когда пользователь ввел это, они печатают в Xcode ok, но при отправке строки json, которая преобразуется, как это ömer > &oumlmer

как это исправить ? как изменить кодировку для этого специального символа.

Код :

let request = NSMutableURLRequest(url: (URL(string: "xxxx.com/userregister.php") )! );
request.httpMethod = "POST";
let userstring = "My name is ömer";  
print(userstring)  //Everything okey printing : My name is Ömer
requst.httpBody=userstring.data(using: .utf8)    //I think problem is here.Its saving to database like : My name is &oumlMer

UserRegister.РНР

<?php 
require("Conn.php");
require("MySQLDao.php");

$email = htmlentities($_POST["email"]);
$password = htmlentities($_POST["password"]);
$name = htmlentities($_POST["name"]);
$gsm = htmlentities($_POST["gsm"]);
$onayid = "0";
$surname = htmlentities($_POST["surname"]);
$qrcodeid = htmlentities($_POST["qrcodeid"]);
$returnValue = array();

if(empty($email) || empty($password))
{
$returnValue["status"] = "error";
$returnValue["message"] = "Missing required fieldd";
echo json_encode($returnValue);
return;
}

$dao = new MySQLDao();
$dao->openConnection();
$userDetails = $dao->getUserDetails($email);

if(!empty($userDetails))
{
$returnValue["status"] = "error";
$returnValue["message"] = "User already exists";
echo json_encode($returnValue);
return;
}

$secure_password = md5($password); // I do this, so that user password cannot be read even by me

$result = $dao->registerUser($email,$secure_password,$name,$gsm,$onayid,$surname,$qrcodeid);

if($result)
{
$returnValue["status"] = "Success";
$returnValue["message"] = "User is registered";
echo json_encode($returnValue);
return;
}

$dao->closeConnection();

?>

Коды подключения :

public function openConnection() {
$this->conn = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
    mysql_query("SET character_set_results=utf8", $this->conn);
    mb_language('uni'); 
    mb_internal_encoding('UTF-8');
    mysql_select_db($dbname, $this->conn);
    mysql_query("set names 'utf8'",$this->conn);
if (mysqli_connect_errno())
echo new Exception("Could not establish connection with database");
}

Исправлено (необходимо изменить .php файл mysql соединение ) :

if (!$this->conn->set_charset("utf8")) {
    printf("Error loading character set utf8: %sn", $this->conn->error);
    exit();
} else {
    printf("Current character set: %sn", $this->conn->character_set_name());
} 

1 ответ

  1. Проблема в функции htmlentities ().
    Он преобразует все применимые символы в HTML-объекты.
    http://php.net/manual/en/function.htmlentities.php

    Это не предотвращает SQL инъекции. Так что вам это не нужно.
    Вы можете посмотреть это.
    Как предотвратить внедрение SQL в PHP?

    Попробовать это.

    if (!$this->conn->set_charset("utf8")) {
        printf("Error loading character set utf8: %s\n", $this->conn->error);
        exit();
    } else {
        printf("Current character set: %s\n", $this->conn->character_set_name());
    }